小编spu*_*pis的帖子

仅获取具有最大组值的行

例如,我们有:

element | group_value | value
a       | 1           | 2000
a       | 2           | 1500
a       | 2           | 2500
b       | 1           | 1000
Run Code Online (Sandbox Code Playgroud)

我只想返回最后 3 条记录,因为这些记录是每个元素具有最大组值的记录。

我知道有一个带有子查询的解决方案,但有没有一个有效的解决方案?

澄清:对于元素“a”:

2 是最高的 group_value,因此它返回第 2 行和第 3 行>(而不是第一行,因为它的组值不是最高的),

对于元素“b”:

1 是 > 最高的 group_value 所以它返回第 4 行

我的(性能不好)解决问题的方法是:

select * 
from   x x1 
where (element, group_value) in (select   element, max(group_value) 
                                 from     x x2 
                                 where    x1.element = x2.element 
                                 group by x2.element)
Run Code Online (Sandbox Code Playgroud)

postgresql group-by greatest-n-per-group

9
推荐指数
1
解决办法
3万
查看次数