2017-07-22 6 views
0

IはSQLクエリ結果の行の値を比較するにはどうすればよいですか?

A B C 
1 2 12 
1 4 10 
1 3 11 
2 5 9 
2 3 8 
4 7 8 
4 9 3 

を次のように今は、列A中の各別個の値についてこのように出力値を有し、及び列B内の最高値のため、私は返す必要がSQLサブクエリの結果を持っています列C

出力に対応する値が、私はこれを実現するにはどうすればよい

A B C 
1 4 10 
2 5 9 
4 9 3 

になります。

select a, b, c 
from (select t.*, 
      row_number() over (partition by a order by b desc) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

row_number()関数は、各行に順次値を代入:

+1

あなたはどのDBMSを使用していますか? –

+0

@Pサブミット私はMySQLを使用しています –

+0

@dsfasdfadf Google: 'Mysql'のグループあたりトップ1 –

答えて

1

あなたはANSI標準機能row_number()を使用することができます。この場合、同じ値のaのすべての行に同じ値が割り当てられ、最大値は「1」となります。bあなたは最初の、したがってseqnum = 1が欲しいです。

MySQLはこの機能をサポートしていません。代わりに、次のようにします。

select t.* 
from t 
where t.b = (select max(t2.b) from t t2 where t2.a = t.a); 

パフォーマンスを気にする場合は、t(a, b)のインデックスを使用します。

+0

あなたが書いたクエリの説明を追加してください。期待していただきありがとうございます –

+0

@dsfasdfadf。 。 。あなたが答えを受け入れない理由がありますか? –

+0

この質問はこの質問と重複しているので、質問を削除したかったのです。各GROUP BYグループの最初の行を選択しますか?すでに他のユーザーによって指摘されているように。私が思ったのは、私がStackOverflowの答えを受け入れることができないなら、私は削除することができましたが、それは私の質問に対する答えがあるからではありませんでした。あなたの大きな助けに感謝します。あなたのソリューションは完璧に受け入れられます。 –

関連する問題