从"group by having"查询中查找单个值



我有一个包含大约8000行的表。

它有15列,其中一列是"参考编号"。

我的目标是找到所有相互匹配的行,对于匹配的行,找出参考号是什么。

参考号是随机的,与其他数据没有关系。

这是迄今为止我所拥有的SQL,它给了我所有匹配的行和计数:

select 
count(*),
component,
privileges,
protocol,
authority,
score,
means,
difficulty,
hierarchy,
interaction,
scope,
conf,
integrity,
availability,
version
from 
data
group by
component,
privileges,
protocol,
authority,
score,
means,
difficulty,
hierarchy,
interaction,
scope,
conf,
integrity,
availability,
version
having count(*) >1
order by count(*) desc;

我错过了查询的行,因为如果我包括它,我就无法使其按预期工作是reference_number,我需要作为此查询命中的每一行的参考号。因此,如果匹配查询的一组列的count(*)为23,那么所有23列的引用号是多少?这是我的问题,我不确定我是否可以用SQL做到这一点。

我可以创建新的表或视图,我觉得一开始子查询可能会有所帮助,例如

select reference_number from
(select 
count(*),
component,
privileges,
protocol....

但是使用

就失败了
ERROR:  subquery in FROM must have an alias

感谢任何帮助。(如果有帮助的话,我正在使用Postgresql)。

一个选择是使用string_agg()函数。

函数签名为

string_agg (value text, delimiter text)→text。连接的非空输入值到字符串中。第一个值之后的每个值都是前面有相应的分隔符(如果它不是空的)。

因此,在原始查询中,添加string_agg(reference_number, ',')列。这将为每行提供一个以逗号分隔的参考编号列表。

最新更新