私の質問に関係のない名前、人口、その他のフィールドを含む都市に関するデータの表があります。
ID Name Population
1 A 45667
2 B 123456
3 C 3005
4 D 13769
最大人口を見つけるには基本的ですが、1つの列に最大人口があり、別の列に対応する都市の名前がある結果のテーブルが必要です
Population Name
123456 B
similar の質問に目を通しましたが、何らかの理由で答えが複雑に見えます。クエリを1行または2行で記述する方法はありますか?
これにはいくつかの方法があります。
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()
を使用することもできます。次に、同じ人口の都市が複数ある場合、両方の都市名を取得します。 ( デモ を参照)