我有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
我怎樣才能實現這一點。
我有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
我怎樣才能實現這一點。
可以使用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)
索引。
您能否爲您所寫的查詢添加一些解釋。謝謝您的期待 –
@dsfasdfadf。 。 。你有沒有理由不接受答案? –
我想刪除該問題,因爲此問題與此問題重複:請在每個GROUP BY組中選擇第一行?正如其他用戶已經指出的那樣。我認爲如果我不接受StackOverflow允許我刪除的答案,但它不會回答我的問題。感謝您的大力幫助。你的解決方案非常好。 –
您正在使用哪個DBMS? –
@P我在使用MySQL –
@dsfasdfadf Google:「Mysql」中每個組別的前1位 –