web-dev-qa-db-ja.com

最大値を検索し、SQLサーバーの異なるフィールドから対応する値を表示します

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

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

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

Population      Name    
123456          B       

similar の質問に目を通しましたが、何らかの理由で答えが複雑に見えます。クエリを1行または2行で記述する方法はありますか?

22
HDunn

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

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 を参照してください。

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

34
Taryn