postgresql:如何从group by子句中获取主键?
发布时间:2020-12-13 16:31:36 所属栏目:百科 来源:网络整理
导读:这是一个选择一组所需行的查询: select max(a),b,c,d,efrom Tgroup by b,e; 该表有一个主键,列id. 我想通过从每个行中获取主键来在另一个查询中标识这些行.我该怎么办?这不起作用: select id,max(a),efrom T group by b,e;ERROR: column "T.id" must appe
这是一个选择一组所需行的查询:
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |