0

我有一个表播放器的以下表结构

Table Player {  
Long playerID;  
Long points;  
Long rank;  
}

假设 playerID 和积分具有有效值,我可以根据单个查询中的积分数更新所有玩家的排名吗?如果两个人的分数相同,他们应该并列排名。

我正在使用休眠,所以不能执行任何带有变量的查询,所以我想出了这个非常低效的查询。这可以优化以使用上面指定的约束吗?

update player g1 
    set g1.rank = 1 + 
    ((SELECT count(*) from 
    (select * from player) g2 
    where g2.points > g1.points))
4

2 回答 2

1

如果您使用的是 MS SQL Server 2005+ T-SQL,我可以建议您查看出色的ROW_NUMBER()、RANK()、DENSE_RANK() 和 NTILE()函数!

在这里阅读更多关于他们的信息

于 2011-06-09T00:43:30.230 回答
0

SQL Server 中有四种排名功能。ROW_NUMBER、RANK、DENSE_RANK 和 NTILE 用于返回分区上每一行的排名值。

有关它们之间的区别,请查看下面给出的 URL

http://www.freshcodehub.com/Article/50/implement-ranking-functions-in-sql-server

于 2018-05-22T13:53:06.853 回答