如何在SQL中实现这一点

时间:2016-04-29 14:39:26

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

我有这张桌子:

enter image description here

我想要GROUP BY类别,然后只选择前2个产品的NameCategoryRating

所以最终输出应该是这样的:

Id      Name      Category      Rating
1       Iphone    Electronics   5
7       MI        Electronics   5
4       Top       Fashion       5
9       Shoes     Fashion       5
10      Coffe     Food          5
11      jAM       Food          4

我试图通过我的方式解决但仍然没有运气。 我希望每个类别的前2个结果基于评级,如果一个类别有两个相同评级的产品,如5,则结果应显示两者。

我是stackOverFlow的新手,这是我的第一个问题,我不太了解礼仪和规则,但我会学习。

很抱歉,如果我违反任何规则。

1 个答案:

答案 0 :(得分:3)

您可以这样做:

select * 
from (
  select *, 
    rank() over (partition by Category order by Rating desc) as Rank
  from yourtable
) X
where Rank <= 2

如果您的评分相同,您可能需要查看排名与密集排名的差异。