postgresql:如何从group by子句中获取主键?

这是一个选择一组所需行的查询:
select max(a),b,c,d,e
from T
group by b,e;

该表有一个主键,列id.

我想通过从每个行中获取主键来在另一个查询中标识这些行.我该怎么办?这不起作用:

select id,max(a),e
from T 
group by b,e;

ERROR:  column "T.id" must appear in the GROUP BY clause or be used in an aggregate function

我在其他一些postgresql问题中尝试了这个,但没有运气:

select distinct on (id) id,e;

ERROR:  column "T.id" must appear in the GROUP BY clause or be used in an aggregate function

我该怎么办?我知道每个结果只能有一个id,因为它是一个主键…我真的希望主键和其余数据,对于初始(工作)查询返回的每一行.

如果你不关心你得到哪个id,那么你只需要将你的id包装在一些聚合函数中,该函数可以保证给你一个有效的id.想到最大和最小聚合:
-- Or min(id) if you want better spiritual balance.
select max(id),e;

根据你的数据,我认为使用窗口函数将是一个更好的计划(感谢恶魔otto引导到头部):

select id,a,e
from (
    select id,e,rank() over (partition by b,e order by a desc) as r
    from T
) as dt
where r = 1

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...