2017-07-22 69 views
0

我有SQL子查詢結果如下如何比較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中的最高值,我必須返回在列C

相應值的輸出將是

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

我怎樣才能實現這一點。

+1

您正在使用哪個DBMS? –

+0

@P我在使用MySQL –

+0

@dsfasdfadf Google:「Mysql」中每個組別的前1位 –

回答

1

可以使用ANSI標準的功能row_number()

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()功能分配順序值的每一行。在這種情況下,具有相同值a的所有行都被分配相同的值,其中最大的b值爲「1」。你想要第一個,因此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允許我刪除的答案,但它不會回答我的問題。感謝您的大力幫助。你的解決方案非常好。 –