SQL Server 查询排名 (RowNumber) 和分组

标签 sql sql-server tsql group-by rank

我有一个包含一些列的表:用户、类别、值

我想要进行一个查询,该查询将按值对所有用户进行排名,但会针对类别进行重置。

示例:

user1   CategoryA 10
user2   CategoryA 11
user3   CategoryA 9
user4   CategoryB 3
user1   CategoryB 11

查询将返回:

Rank  User   Category  
1     user2   CategoryA
2     user1   CategoryA
3     user3   CategoryA
1     user1   CategoryB
2     user4   CategoryB

有什么想法吗?

我编写查询并指定类别,它可以工作,但我必须编写循环,而且速度非常慢。

最佳答案

在排名功能中使用“分区依据”OVER clause

SELECT
    Rank() over (Partition by Category Order by Value, User, Category) as ranks,
    Category, User
FROM 
    Table1
Group By
    User, Category, Value 
Order by
    ranks asc

关于SQL Server 查询排名 (RowNumber) 和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1139719/

相关文章:

sql - 分组连续范围

sql-server - SQL Server 2008R2 中 "SET STATISTICS TIME ON"的奇怪副作用?

sql - RAISERROR AND NOWAIT 不是那么直接吗?

sql - T-SQL ISNULL() 优化

sql - Hive 查询等价于 sql

SQL:仅比较日期与月份和年份列

mysql - 什么是二进制(应用程序/八位字节流)文件类型?

SQL "transform"查询

sql-server - FORMATMESSAGE 是否为一个参数值返回多个字符串?

sql - 如何从SQL Server Management Studio中的表生成CRUD存储过程