2012-08-23 34 views
2

我現在正在努力使用SQL。SQL Query根據列條目獲取有限數量的結果

我得到了一個包含行ID,名稱,國家,人口的城市。

ID |  name  | country | population 
1 | Shanghai  | CN  | 14608512 
2 | Buenos Aires | AR  | 13076300 
3 | Mumbai  | IN  | 12691836 
4 | Karachi  | PK  | 11624219 
5 | Beijing  | CN  | 7480601 
6 | Wuhan  | CN  | 4184206 
7 | Berlin  | DE  | 3426354 
8 | Puyang  | CN  | 3590000 

該數據庫包含了人口城市全部高於15000。現在,我想通過人口得到世界上最大的城市50全球數據。

SELECT * FROM cities ORDER BY population DESC LIMIT 0,50 

我現在的問題是,我得到這樣的在中國12個城市,4個在印度等,但我需要通過國家限制我的結果,所以每個國家只有2個城市返回。

結果通過上面的例子:

ID |  name  | country | population 
1 | Shanghai  | CN  | 14608512 
2 | Buenos Aires | AR  | 13076300 
3 | Mumbai  | IN  | 12691836 
4 | Karachi  | PK  | 11624219 
5 | Beijing  | CN  | 7480601 
7 | Berlin  | DE  | 3426354 

但是就像我說的,我用了這種操作的正確SQL查詢掙扎。我嘗試了GROUP BY ... HAVING和各種子查詢,但沒有一個似乎返回正確的結果集。

回答

1

試試這個:

select * from 
    (select t.* from t_population t 
    join 
     (select country,MAX(population) as population 
     from t_population 
     group by country)a 
    on t.country=a.country 
    and t.population=a.population 
union all 
    select t.* from t_population t 
    join 
     (select country,MAX(population) as population 
     from t_population t1 
     where population <> (select MAX(population) 
     from t_population t2 where t1.country=t2.country) 
     group by country)b 
    on t.country=b.country 
    and t.population=b.population)c 
order by population desc 


SQL Fiddle Demo

+0

感謝的人,這真的似乎工作! :)你明天會拯救我的一天! – michi