如何在SQL中选择具有唯一值和最高数量的TOP'n'行

时间:2019-04-15 11:23:44

标签: sql sql-server greatest-n-per-group

我正在使用SSMS v17.6,我需要为每个唯一的“ ID”和“ FRUIT”收集前三行,其最高值如下所示。

示例数据

ID  FRUIT   OTHER_ID    VALUE 
GG-1    APPLE   25432   100
GG-1    APPLE   37586   200
GG-1    APPLE   33614   400
GG-1    APPLE   70776   500
GG-1    APPLE   52102   600
GG-2    BANANA  33745   150
GG-2    BANANA  44823   250
GG-2    BANANA  88313   350
GG-2    BANANA  25181   450
GG-2    BANANA  65301   650

结果(前3名)

ID  FRUIT   OTHER_ID    VALUE       
GG-1    APPLE   33614   400
GG-1    APPLE   70776   500
GG-1    APPLE   52102   600
GG-2    BANANA  88313   350
GG-2    BANANA  25181   450
GG-2    BANANA  65301   650

数据不限于此示例中显示的两个水果和ID,而是每个水果都有唯一的ID。我认为可以仅基于ID本身来完成。在我看来SELECT TOP(n)无效,Order By ... LIMIT n

也无效

也许某种等级函数可以做到这一点,但我不确定这里需要的术语。

1 个答案:

答案 0 :(得分:1)

使用row_number()

select t.*
from (select t.*,
             row_number() over (partition by id, fruit order by VALUE desc) as seqnum
      from t
     ) t
where seqnum <= 3;