2013-04-15 102 views
-1

,我有以下表,我想编写一个查询:SQL查询涉及MAX

表名:Stats_State_County

Column name Type  Constraint 
----------------------------------- 
Population  number 
CountyName  string 
State   number Primary key 

我想找到县的最大的人口每个州。我只想列出该县的名称和该县的最大人口。目前,我有一些返回状态和他们的最大人口,但我需要返回县名而不是州。

感谢

回答

-1

使用子查询coorleated识别最大的人口为同一状态中的一个县。

With CTE as 
(Select 'A' as state,1000 as population, 'A1' as county FROM DUAL UNION ALL 
Select 'A',1000, 'A2' FROM DUAL UNION ALL 
Select 'A',1001, 'A3' FROM DUAL UNION ALL 
Select 'A',1001, 'A3' FROM DUAL UNION ALL 
Select 'A',1001, 'A4' FROM DUAL UNION ALL 
Select 'B',2000, 'B1' FROM DUAL UNION ALL 
Select 'B',2000, 'B3' FROM DUAL UNION ALL 
Select 'B',2001, 'B2' FROM DUAL UNION ALL 
Select 'B',2002, 'B4' FROM DUAL) 
Select population, county from CTE A1 
    where a1.population >= (Select max(A2.population) from CTE A2 Where A2.State = A1.State) Group by population, county 

返回:

Population County 
1001  A3 
1001  A4 
2002  B4 

与你的表名称替换CTE在这两种情况下,在这个选择,你应该没问题。

选择人口,从CTE A1 县城里a1.population> =(SELECT MAX(A2.population)从CTE A2凡A2.State = A1.State)集团由人口,县

注:如果两个县有相同的人口,那么两个县都归还了。如果一个县因为某种原因被列出了两次,他们会被群组删除。如果同一个县在相同人口的两个州中存在,那么您可能不会得到想要的结果,除非您将状态添加到select和group by ...

+0

SQLite没有有CTE。 –

+0

@CL。那么提供的答案也没有CTE。 with语句仅用于获取示例数据。在返回后您会注意到:在选择两种情况下将CTE替换为您的表名,并且您应该没问题。 – xQbert

0

使用SQLite 3.7.11或更高版本,您可以使用此:

SELECT CountyName, 
     MAX(Population) 
FROM Stats_State_County 
GROUP BY State 

在早期的SQLite的版本,像CountName非聚集场不能保证来自该匹配MAX相同的记录,所以你必须从人口查找名称一个单独的步骤:

SELECT (SELECT CountyName 
     FROM Stats_State_County 
     WHERE State = T1.State 
      AND Population = T1.MaxPop), 
     MaxPop 
FROM (SELECT State, 
      MAX(Population) AS MaxPop 
     FROM Stats_State_County 
     GROUP BY State 
    ) AS T1