[英]Select TOP 2 values for each group
我遇到的問題是每組只獲得TOP 2值(組在列中)。
示例:
ID Group Value
1 A 30
2 A 150
3 A 40
4 A 70
5 B 0
6 B 100
7 B 90
我希望我的輸出是
ID Group Value
1 A 150
2 A 70
3 B 100
4 B 90
簡單地說,對於每個組,我只想要2行具有最高值
大多數數據庫都支持ANSI標准row_number()
函數。 你會用它作為:
select group, value
from (select t.*,
row_number() over (partition by group order by value desc) as seqnum
from t
) t
where seqnum <= 2;
要設置id
,可以在外部查詢中使用row_number()
:
select row_number() over (order by group, value) as id,
group, value
from (select t.*,
row_number() over (partition by group order by value desc) as seqnum
from t
) t
where seqnum <= 2;
但是,更改id
似乎是可疑的。
您可以使用具有等級函數ROW_NUMBER()
CTE
。
這是獲取結果的查詢。
;WITH cte AS
( SELECT Group, value,
ROW_NUMBER() OVER (PARTITION BY Group ORDER BY value DESC) AS rn
FROM test
)
SELECT Group, value FROM cte
WHERE rn <= 2
ORDER BY value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.