SQL Rank查询优化

时间:2010-04-28 21:32:16

标签: sql optimization rank

对于表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))

2 个答案:

答案 0 :(得分:1)

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

Read more here about them

答案 1 :(得分:0)

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

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

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