在PostgreSQL中的条件分组(将相似项分组)

6
我可以帮您进行翻译。以下是需要翻译的内容:

我有以下查询:

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次的记录分组,同时正常返回所有其他记录。
非常感谢任何帮助 - 谢谢!

s.id会保持不变还是可能会变化? - Naved
s.id会不同,但对于分组行,理想情况下应包含该组的第一行数据(如果有意义的话!) - harman_kardon
SELECT [字段名] FROM [表名] WHERE [条件] (INNER/OUTER JOIN) .... GROUP BY [字段名] HAVING [条件] - Acn
1个回答

9
您可以这样做:
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)

1
+1,而且条件可以更短一点:cnt < 6 或 rnk = 1 - Andriy M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接