Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写SQL来选择每个组中的最大值?_Sql - Fatal编程技术网

如何编写SQL来选择每个组中的最大值?

如何编写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

假设我们有一个州(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
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);