PostgreSQL选择最大值与分组依据和附加值[重复]

Posted

技术标签:

【中文标题】PostgreSQL选择最大值与分组依据和附加值[重复]【英文标题】:PostgreSQL select max with group by and additional value [duplicate] 【发布时间】:2015-08-01 20:44:02 【问题描述】:

有以下数据from a SELECT * FROM (SELECT...) AS foo

ID    Country   Area
1     US        100
1     UK        200
2     AU        150
2     NZ        250

如何通过ID 选择排名靠前的地区和国家?所以GROUP BY IDMAX(DESC)还包括County

查询的结果是:

1     UK     200
2     NZ     250

【问题讨论】:

【参考方案1】:
SELECT DISTINCT ON (ID)
       ID, Country, Area
FROM   foo
ORDER  BY ID, Area DESC NULLS LAST;

详细解释和特殊情况下更快替代方案的链接:

Select first row in each GROUP BY group?

【讨论】:

【参考方案2】:

试试这个

select ID,Country,Area
from (SELECT...) AS foo
WHERE Area = (SELECT MAX(Area)
              FROM (SELECT...) AS foo2
              WHERE foo.ID = foo2.ID )

【讨论】:

感谢您的回复。 Erwin Brandstetters 解决方案使得无需运行 (SELECT.. 两次) 就可以做到这一点。 @Matt true 他的回答更好!

以上是关于PostgreSQL选择最大值与分组依据和附加值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有分组依据的情况下选择具有最大技能属性的 ID

具有分组依据的 PostgreSQL 聚合函数

即使字段包含在分组依据列表中,分组依据或聚合错误

SQL 优化(分组依据和最大值)

不同的总和和分组依据

具有内部联接、多个分组依据和最小最大值的 Linq 查询