2013-04-15 134 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