【发布时间】:2020-07-09 03:18:40
【问题描述】:
我的 PostgreSQL 11 数据库 count_tbl(Windows 10 x64 机器)中有以下数据。
grp id value
1 1 19.7
1 2 19.7
1 3 19.7
1 4 19.7
1 5 19.7
1 6 19.7
1 7 18.8
1 8 18.8
1 9 18.8
1 10 18.8
1 11 18.8
1 12 18.8
2 1 18.6
2 2 18.6
2 3 18.6
2 4 18.6
2 5 18.6
2 6 0.0
2 7 0.0
2 8 0.0
2 9 21.4
2 10 21.4
2 11 0.0
2 12 0.0
以下查询针对每个组 (grp) 查找最频繁的值:
Select Distinct on (grp)
grp,
case
when freq > 1
then value
else 0.0
end as freq_val
From
(
Select
grp,
value,
count(id) as freq
From count_tbl
Group by grp, value
Order by grp
) s1
Order by grp, freq desc, value desc;
上述查询的输出是:
grp freq_val
1 19.7
2 18.6
现在,我想将最常见的值与相应的 ID 相关联(例如,对于 grp = 1,最常见的值 19.7 的 ID 为 1、2、3、4、5、6),假设,作为integer array。我的预期输出是:
grp freq_val ids
1 19.7 {1,2,3,4,5,6}
2 18.6 {1,2,3,4,5}
是否有人愿意对此进行反思或建议如何实现?
【问题讨论】:
标签: sql arrays postgresql group-by count