sql - 或者在 postgres 中按字段分组

标签 sql postgresql group-by

我在 psql 中有这两个查询:

select a.name, a.port, count(a.id) as cont 
from a 
group by a.name, a.port 
order by cont desc 
limit 5;

select a.name, a.ip, count(a.id) as cont 
from a 
group by a.name, a.ip 
order by cont desc 
limit 5;

我想编写一个查询,通过这 2 个组的计数获取前 5 条记录,并显示它们的 a.name、count、a.port/a.ip 字段。有谁知道如何构造此查询?

我想要这样的东西:

select a.name, a.port or a.ip, count(a.id) as cont 
from a 
group by a.name, a.port or a.ip 
order by cont desc 
limit 5;

感谢任何有关如何在 postgres 中执行此操作的指导。

最佳答案

假设 port/ip 有兼容的类型,那么横向连接是最好的解决方案:

select a.name, v.which, v.val, count(*) as cont
from a cross join lateral
     (values ('ip', ip), ('port', port)
     ) v(which, val)
group by a.name, v.which, v.val
order by cont desc
limit 5;

如果它们的类型不同,可以使用::text将它们转换为字符串:

     (values ('ip', ip::text), ('port', port::text)
     ) v(which, val)

关于sql - 或者在 postgres 中按字段分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57154749/

相关文章:

mysql - 在源中创建行并与 Sequelize 多对多模型关联

postgresql - postgres 中的主键可以有零值吗?

PHP/MYSQL 查询帮助对结果进行分组

mysql - SQL 查询以检索来自所有用户 friend 的消息

mysql - SQL:找到生成日期的公式,只是想理解它

c# - 连续连接数据库出错

postgresql - pgAdmin 4 无法在 Windows 10 64 位上启动

postgresql - PL/pgQSL - 在存储过程中枚举 ROWTYPE

mysql - 我想显示最高的号码。剧集数

SQL - 加入者和离开者 - 行到列