简体   繁体   English

为每个组选择TOP 2值

[英]Select TOP 2 values for each group

I'm having problem with getting only TOP 2 values for each group (groups are in column). 我遇到的问题是每组只获得TOP 2值(组在列中)。

Example : 示例:

ID    Group    Value
1        A       30
2        A      150
3        A       40
4        A       70
5        B        0
6        B      100
7        B       90

I expect my output to be 我希望我的输出是

ID    Group    Value
 1       A       150
 2       A        70
 3       B       100
 4       B        90

Simply, for each group I want just 2 rows with the highest Value 简单地说,对于每个组,我只想要2行具有最高值

Most databases support the ANSI standard row_number() function. 大多数数据库都支持ANSI标准row_number()函数。 You would use it as: 你会用它作为:

select group, value
from (select t.*,
             row_number() over (partition by group order by value desc) as seqnum
      from t
     ) t
where seqnum <= 2;

To set the id you can use row_number() in the outer query: 要设置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;

However, changing the id seems suspicious. 但是,更改id似乎是可疑的。

You can use CTE with rank function ROW_NUMBER() . 您可以使用具有等级函数ROW_NUMBER() CTE

Here is query to get your result. 这是获取结果的查询。

;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