2017-10-01 18 views
0

クエリから次の結果が得られました。それぞれの名前の最小値の数を数えるサブクエリを作成します。例えばテーブル内の異なる名前の最小値のSQL Serverクエリカウント

Marcus 25 
Marcus 27 
Marcus 25 
Jonathan 36 
Jonathan 36 
Jonathan 36 
Jonathan 38 

そして結果は次のようになります。

Marcus 25 2 
Jonathan 36 3 

任意のアイデア?

+0

は 'マーカスは'より大きいか小さいと考えることが3'べきマーカス27? –

+0

マーカス3とはどういう意味ですか? – Sink

+0

もしあなたがこのような価値を持っていれば、既に持っている「Marcus 27」よりも大きくても小さくてもかまいませんか?あなたがゴードンの答えを受け入れたので、この質問には関係ありませんが、それは考えるべきことです - 文字列には異なるソートルールと数字があります。 –

答えて

1

一つの方法は、ウィンドウ関数を使用しています。

select t.name, count(*) 
from (select t.*, 
      rank() over (partition by name order by val) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

EDIT:

ああ、OPも値を望んでいる:

select t.* 
from (select t.name, t.val, count(*) as cnt, 
      row_number() over (partition by name order by val) as seqnum 
     from t 
     group by t.name, t.val 
    ) t 
where seqnum = 1; 
関連する問題