我有以下查询:
SELECT s.id,
s.name,
s.prom,
s.some_other_field,
... many more fields also
FROM mytable s
INNER JOIN (on some other tables etc.)
如果有超过 6 条记录具有相同的名称 (s.name),我想将这些项目组合成一行(我不关心其他数据是哪个分组到该行,即该组的第一条记录就可以了)。
这在 Postgres 中可行吗?我想这是一个条件分组依据,我想对同名出现超过 6 次的记录进行分组,同时正常返回所有其他记录。
非常感谢任何帮助 - 谢谢!
最佳答案
你可以这样做:
select * from (
SELECT s.id,
s.name,
s.prom,
s.some_other_field,
... many more fields also,
row_number() over (partition by s.name order by s.id) as rnk,
count(*) over (partition by s.name) cnt
FROM mytable s
INNER JOIN (on some other tables etc.)
) a
where cnt < 6 or (cnt >=6 and rnk = 1)
关于sql - PostgreSQL 中的条件分组依据(分组相似项),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8816689/