对于表Player
,我有以下表结构Table Player {
Long playerID;
Long points;
Long rank;
}
假设playerID和积分有有效值,我可以根据单个查询中的积分数更新所有玩家的等级吗?如果两个人拥有相同数量的积分,他们应该为排名配合。
我正在使用hibernate,因此无法使用变量执行任何查询,因此我想出了这个查询,效率非常低。这可以优化以适应上面指定的约束吗?
update player g1
set g1.rank = 1 +
((SELECT count(*) from
(select * from player) g2
where g2.points > g1.points))
答案 0 :(得分:1)
如果您使用的是MS SQL Server 2005+ T-SQL,我建议您查看精彩的 ROW_NUMBER(),RANK()和DENSE_RANK()以及NTILE()函数!
答案 1 :(得分:0)
SQL Server中有四个排名功能。 ROW_NUMBER,RANK,DENSE_RANK和NTILE用于返回分区上每行的排名值。
对于它们之间的区别,请查看下面给出的URL
http://www.freshcodehub.com/Article/50/implement-ranking-functions-in-sql-server