sql - PostgreSQL 中的条件分组依据(分组相似项)

标签 sql database postgresql

我有以下查询:

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/

相关文章:

mysql,转储,数据库恢复

ruby-on-rails - 按计数查询加快 Active Record 组

mysql - 如何在同一个查询中添加多个聚合函数的结果?

SQL Server - 定义中的 View 名称与实际 View 名称不同

mysql - 可空列的行为不一样

php - 第一个0消失了?

java - 在不循环所有记录的情况下从数据库检索特定数据的最有效方法是什么?

mysql - 与上传的数据创建多对多关系

mysql - Rails .where 调用数据库显示开发中的图像 (mysql),但不显示生产中的图像 (postgres)

PostgreSQL 触发器错误 : control reached end of trigger procedure without RETURN