如何编写SQL来选择每个组中的最大值?
假设我们有一个州(varchar)、城市(varchar)和城市人口(int)的表格如何编写SQL来选择每个组中的最大值?,sql,Sql,假设我们有一个州(varchar)、城市(varchar)和城市人口(int)的表格 New York, New York, 8175133 Los Angeles, California, 3792621 Chicago, Illinois, 2695598 San Diego, California, 1307402 我想选择每个州人口最多的城市。结果是, New York, New York, 8175133 Los Angeles, California, 3792621 Chicag
New York, New York, 8175133
Los Angeles, California, 3792621
Chicago, Illinois, 2695598
San Diego, California, 1307402
我想选择每个州人口最多的城市。结果是,
New York, New York, 8175133
Los Angeles, California, 3792621
Chicago, Illinois, 2695598
如何编写SQL来实现这一点
更新:
让我明确一点:结果应该包括每个州有一个人口最多的城市。在上面的例子中,“圣地亚哥”的人口比“洛杉矶”少,所以它不会出现在结果中。就这么做吧:
SELECT state, city, MAX(population) AS LargestPeople FROM yourtable GROUP BY state DESC
就这么做吧:
SELECT state, city, MAX(population) AS LargestPeople FROM yourtable GROUP BY state DESC
在罕见的情况下,如果两个或两个以上人口相同的城市出现平局,则两个城市都将显示:
SELECT
t.*
FROM
tableX t
JOIN
( SELECT State
, MAX(Population) AS Population
FROM tableX
GROUP BY State
) maxp
ON maxp.State = t.State
AND maxp.Population = t.Population
如果您的DBMS具有分析(窗口)功能,您也可以使用此功能(如前所示): 或者(已解决关系,每个状态只返回一行):
在中测试在罕见的情况下,如果两个或两个以上城市人口相同,则两个城市都将显示:
SELECT
t.*
FROM
tableX t
JOIN
( SELECT State
, MAX(Population) AS Population
FROM tableX
GROUP BY State
) maxp
ON maxp.State = t.State
AND maxp.Population = t.Population
如果您的DBMS具有分析(窗口)功能,您也可以使用此功能(如前所示): 或者(已解决关系,每个状态只返回一行):
测试中现在安德鲁怎么样?我已经更正了我的代码。你觉得怎么样^^那现在安德鲁呢?我已经更正了我的代码。你觉得怎么样^^
select *
from pop
where (state, population) in
(select state, max(population)
from pop
group by state);