30

私の質問に関係のない名前、人口、その他のフィールドを含む都市に関するデータを含むテーブルがあります。

ID      Name    Population
1       A       45667   
2       B       123456  
3       C       3005    
4       D       13769   

最大人口を見つけることは基本ですが、ある列に最大人口があり、別の列に対応する都市の名前がある結果のテーブルが必要です

Population      Name    
123456          B       

私は同様の質問を見てきましたが、何らかの理由で答えが複雑すぎるように見えます. クエリを 1 行または 2 行で記述する方法はありますか?

4

1 に答える 1

47

これを行うにはいくつかの方法があります。

WHERE句のフィルタ:

select id, name, population
from yourtable
where population in (select max(population)
                     from yourtable)

またはサブクエリ:

select id, name, population
from yourtable t1
inner join
(
  select max(population) MaxPop
  from yourtable
) t2
  on t1.population = t2.maxpop;

または、 を使用できますTOP WITH TIES。同点がない場合は、 を削除できますwith ties。これには、同じ人口値を持つすべての行が含まれます。

select top 1 with ties id, name, population
from yourtable
order by population desc

SQL Server を使用しているため、ランキング関数を使用して結果を取得することもできます。

select id, name, population
from
(
  select id, name, population,
    row_number() over(order by population desc) rn
  from yourtable
) src
where rn = 1

SQL Fiddle with Demo of allを参照してください。

ランキング機能の補足として、 のdense_rank()代わりに使用することをお勧めしますrow_number()。次に、人口が同じ都市が複数ある場合は、両方の都市名を取得します。(デモを参照)

于 2013-04-11T10:13:24.867 に答える