Sql 在每个分类中获取前 2 个结果

标签 sql sql-server sql-server-2008

嗨,我是 sql 新手,遇到了问题。

下面是我的表格的示例。这不是确切的表格,而是我想要实现的目标的示例

   Name Classification Hits
    A      A1             2
    A      A2             3
    A      A3             4
    A      A4             8
    A      A5             9
    B      B1             9
    B      B2             3
    B      B3             4
    B      B4             8
    B      B5             9
    c      c1             8
    c      c2             9
    c      c3             4
    c      c4             8
    c      c5             9
    ...

我正在寻找基于热门点击的结果。例如

Name Classification Hits
A      A4             8
A      A5             9
B      B1             9
B      B5             9
c      c2             9
c      c5             9

我已经尝试过这个查询

SELECT  TOP (2) Name , Classification , Hits
FROM   Table4
Group By  Name , Classification , Hits
Order By Hits

但我只得到两个值。我在这里做错了什么有什么建议吗?

最佳答案

您可以将 CTE 与 Row_Number() 函数结合使用

;WITH CTE AS(
  SELECT Name,
         Classification,
         Hits,
         Row_Number() OVER(Partition by name ORDER BY Hits DESC) AS RowNum
  FROM Table4
  )

SELECT Name,
       Classification,
       Hits
FROM CTE
WHERE RowNum <= 2
ORDER BY Name, Hits

SQL FIDDLE DEMO

关于Sql 在每个分类中获取前 2 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25927249/

相关文章:

java - OpenJPA 将另一表中的数据插入到一个表中

sql - PostgreSQL - 管理器层次结构的递归 CTE 自连接

mysql - 复杂的SQL更新语句

c# - 在 SQL Server 中根据日期自动发送电子邮件

sql-server - 更改 SQL Server 数据库版本

sql-server - 有没有一种方法可以将主键上的非聚集索引转换为聚集索引? (SQL Server 2008)

c# - 内存中的 CLR 存储过程和对象

MYSQL选择查询包括所有如果没有指定

sql - Azure 数据库连接错误。

sql-server - 为什么我的事务会在 INSERT INTO 失败时自动回滚?