簡體   English   中英

為每個組選擇TOP 2值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM