加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

在MySQL中,排序后添加序号列

发布时间:2022-12-08 13:03:53 所属栏目:MySql教程 来源:未知
导读: 因为我在刷LeetCode题目的时候,遇到了这题Rank Scores

题目的要求是对score进行降序排列后并生成序号。它要得到的结果如下:

我的思路是先将score去重后进行降序排列,然后再添加序号列

因为我在刷LeetCode题目的时候,遇到了这题Rank Scores

题目的要求是对score进行降序排列后并生成序号。它要得到的结果如下:

mysql 排序函数_mysql desc排序_mysql排序

我的思路是先将score去重后进行降序排列,然后再添加序号列,最后将新表与原表利用JOIN联结起来。

1、去重与降序

在MYSQL中,去重要用到DISTINCT语句mysql排序,而它的排序默认的是升序,我们要的是降序便需要用到DESC。代码如下:

select distinct score 
from scores
order by score desc

2、添加序号列

将上面得到的表命名为T1,对其添加序号列。在这里有个疑惑:为什么不在上表中直接添加序号列呢?例如将代码写成:

select distinct score,(@rownum:=@rownum+1) as rownum
from scores,(select @rownum:=0) R
order by score desc

运行结果如下:

score  rownum
4.00   3.0
4.00   5.0

3.85   4.0
3.65   2.0
3.65   6.0
3.50   1.0

这时就会发现它没有去重,而且它的序号和原来的ID是一致的。所有说直接添加序号列不可行。因此我们对T1添加序号列,代码如下:

select T1.score as score1,(@rownum:=@rownum+1) as rownum
from
(select distinct score 
from scores
order by score desc) as T1,(select @rownum:=0) as R

其结果如下:

score1  rownum
4.00    1.0
3.85    2.0
3.65    3.0
3.50    4.0

3、与Scores表(即原表)联结

到这里,只要对Scores表降序排列,再与步骤2得到的T2表联结就可以了。代码如下:

mysql desc排序_mysql排序_mysql 排序函数

select score,T2.rownum as Rank
from Scores
join
(select T1.score as score1,(@rownum:=@rownum+1) as rownum
from
(select distinct score 
from scores
order by score desc) as T1,(select @rownum:=0) as R) as T2
on Scores.score=T2.score1
order by Scores.score DESC

结果如下:

Score   Rank
4.00    1.0
4.00    1.0
3.85    2.0
3.65    3.0
3.65    3.0
3.50    4.0

以上。

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!