【问题标题】:SQL Rank query optimizationSQL Rank 查询优化
【发布时间】:2010-04-28 21:32:15
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您可以编辑您之前的问题,并让 cmets 要求澄清答案。无需提出新问题...
  • @meriton - 这就是我最初所做的,但有人建议我提出一个新问题。对不起,如果我没有遵守约定。

标签: sql optimization rank


【解决方案1】:

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

Read more here about them

【讨论】:

  • 它们也可用于 Oracle 和 PostgreSQL。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2014-02-04
    • 2014-11-16
    • 2011-06-22
    相关资源
    最近更新 更多