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

Find individual values from a "group by having" query

我有一个 table 包含大约 8,000 行。

它有 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我需要作为此查询命中的每一行的参考号.因此,如果与查询匹配的一组列的计数 (*) 为 23,那么所有 23 的参考编号是多少。这是我的问题,我不确定我是否可以使用 SQL 来做到这一点。

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

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. Concatenates the non-null input values into a string. Each value after the first is preceded by the corresponding delimiter (if it's not null).

因此,在您的原始查询中,添加一个包含 string_agg(reference_number, ',') 的列。这将为您提供每行的 comma-separate 参考编号列表。