MYSQL语句的三种写法-分数排名例子

Posted TGB-Earnest

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL语句的三种写法-分数排名例子相关的知识,希望对你有一定的参考价值。

【需求】

现在要对scores表进行排序,接下来我们用三种写法解决。
【解法】
(1)普通SQL

SELECT Score, 
(SELECT COUNT(DISTINCT Score) FROM Scores WHERE Score >= s.Score) Rank 
FROM Scores s ORDER BY Score DESC;

(2)变量

SELECT Score,
@rank := @rank + (@pre <> (@pre := Score)) Rank
FROM Scores, (SELECT @rank := 0, @pre := -1) INIT 
ORDER BY Score DESC;

变量这里声明了两个变量

select @rank:=0,@pre:=-1

@pre表示之前的分数结果
<>表示如果不相等就为true返回1,如果相等为false为0
(3)窗口函数

# -- 不指定 partition by 相当于所有行数据一个 partition, 数据进行区内排序
# -- dense_rank() 相当于每一行数据一个窗口, 对数据进行比较
# -- rank   按照成绩排名,纯排名 
# -- dense_rank   --按照成绩排名,相同成绩排名一致
# -- row_number   --按照成绩依次排名
# -- ntile         --按照分数划分成绩梯队
select
    Score,
    dense_rank() over(order by score desc) as 'Rank'
from
    scores;

以上是关于MYSQL语句的三种写法-分数排名例子的主要内容,如果未能解决你的问题,请参考以下文章

MySQL分数排名

MySQL分数排名

Java List集合计算排名,相同分数名次一样

Java List集合计算排名,相同分数名次一样

Mysql 单表查询各班级总分前三名

1查询成绩表的总分数,平均分,最低分和最高分。用sql语句怎么写