2013-04-11 10 views
19

私の質問に関係のない名前、人口、その他のフィールドを含む都市に関するデータがあるテーブルがあります。私はを通じて見てきたSQLサーバーの異なるフィールドから最大値を見つけ、対応する値を表示

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) 

または副問合せ:

+1

与えられた(最大)人口を持つ複数の都市を持つことができます。それはあなたのために複数のレコードの結果を受け入れることができますか? – Pino

+0

テーブルは米国の都市の実世界のデータなので、重複はありません。 – HDunn

+5

私はあなたがマーフィーの法則を知らないと思います:-) – Pino

答えて

30

には、いくつかのこれを行うことができる方法があります

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 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を参照してください:あなたはまた、結果を得るためにランキング機能を使用することができますSQL Serverを使用しているので

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

:これは、同じ人口値を持つすべての行が含まれます。

ランク付け関数の副次メモとして、row_number()の代わりにdense_rank()を使用すると便利です。同じ人口を持つ複数の都市がある場合は、両方の都市名を取得します。 (Demoを参照してください)

+0

最初の例は、ありがとうございます。 – HDunn

+3

@HDunn大歓迎です、私はいくつかの作業バージョンをお見せしたいと思います。 :) – Taryn

+2

"order by .... desc limit 1"はシンプルで素敵なアイデアです。 – Dexter

関連する問題