SQL Server查询排名(行数)和分组
我有一个表,它有一些列:User、Category、Value 我想做一个查询,根据值对所有用户进行排名,但对类别进行重置 例如:SQL Server查询排名(行数)和分组,sql,sql-server,tsql,group-by,rank,Sql,Sql Server,Tsql,Group By,Rank,我有一个表,它有一些列:User、Category、Value 我想做一个查询,根据值对所有用户进行排名,但对类别进行重置 例如: 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
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
有什么想法吗
我编写查询并指定类别,它可以工作,但是我必须编写循环,而且速度非常慢
Select User, Category,
(Select Count(*) From Table
Where Category = A.Category
And Value <= A.Value) Rank
From Table A
Order By Category, Value
如果值可以有重复项,那么您必须决定是否要“计数”与秩相等的重复项,或者不等于稠密秩,thanx@shannon
普通职级:
Select User, Category,
(Select 1 + Count(*) From Table -- "1 +" gives 1-based rank,
Where Category = A.Category -- take it out to get 0-based rank
And Value < A.Value) Rank
From Table A
Order By Category, Value
密集等级:
Select User, Category,
(Select 1 + Count(Distinct Value) -- "1 +" gives 1-based rank,
From Table -- take it out to get 0-based rank
Where Category = A.Category
And Value < A.Value) Rank
From Table A
Order By Category, Value
在排名函数中使用分区
我当前的查询:从表1中选择按值排序的排名、用户、类别为排名、类别、用户按用户分组、类别、值按排名排序是非常低效的。事实上,他使用的是RANK,这至少意味着SQL 2005.True。SQL 2008。我会尝试所有答案,但首先是清晰,然后是效率。。。b的问题是关于用户的,所以我们不是在讨论数十亿条记录……它不应该是从表中选择用户、类别、选择计数,其中类别=A。类别和值我用秩函数和更清晰的分区找到解决方案。与内置的秩函数相比,在连接的情况下,也会得到不同的秩。例如,如果值为10、20、20,则代码的结果为1、3,而内置秩的结果为1、2、2。1261473条记录在33秒内完成,我添加了一个表联接,但问题中没有包含该联接。感谢您获得与问题输出相同的输出顺序,按类别、等级排序。此外,User返回DB User,即dbo,并且必须被引用才能到达名为User的列。引用了[user]或在user上引用了标识符。@Shannon:我从OP在注释中添加的查询开始。我只想通过
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