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