MySQL使用变量实现各种排序
更新时间:2017年05月20日 13:58:10 作者:feixianxxx
这篇文章主要介绍了MySQL使用变量实现各种排序,需要的朋友可以参考下
核心代码
--下面我演示下MySQL中的排序列的实现
--测试数据
CREATE TABLE tb
(
score INT
);
INSERT tb SELECT
5 UNION ALL SELECT
4 UNION ALL SELECT
4 UNION ALL SELECT
4 UNION ALL SELECT
3 UNION ALL SELECT
2 UNION ALL SELECT
1;
--1.row_number式的排序
SET @row_number =0;
SELECT @row_number := @row_number+1 AS row_number,score
FROM tb
ORDER BY score DESC ;
+------------+-------+
| row_number | score |
+------------+-------+
| 1 | 5 |
| 2 | 4 |
| 3 | 4 |
| 4 | 4 |
| 5 | 3 |
| 6 | 2 |
| 7 | 1 |
+------------+-------+
--2.dense_rank式的排序
SET @dense_rank = 0,@prev_score = NULL;
SELECT @dense_rank :=IF(@prev_score=score,@dense_rank,@dense_rank+1) AS decnse_rank,
@prev_score := score AS score
FROM tb
ORDER BY score DESC ;
+-------------+-------+
| decnse_rank | score |
+-------------+-------+
| 1 | 5 |
| 2 | 4 |
| 2 | 4 |
| 2 | 4 |
| 3 | 3 |
| 4 | 2 |
| 5 | 1 |
+-------------+-------+
--3.rank式的排序
SET @row=0,@rank=0,@prev_score=NULL;
SELECT @row:=@row+1 AS ROW,
@rank:=IF(@prev_score=score,@rank,@row) AS rank,
@prev_score:=score AS score
FROM tb
ORDER BY score DESC;
+------+------+-------+
| ROW | rank | score |
+------+------+-------+
| 1 | 1 | 5 |
| 2 | 2 | 4 |
| 3 | 2 | 4 |
| 4 | 2 | 4 |
| 5 | 5 | 3 |
| 6 | 6 | 2 |
| 7 | 7 | 1 |
+------+------+-------+
相关文章
解决启动MySQL服务时出现"mysql本地计算机上的MySQL服务启动后停止"的问题
某一天我的MySQL启动突然出现了异常:“mysql本地计算机上的MySQL服务启动后停止,某些在未由其他服务或程序使用时将自动停止,” ,小编在网络上面找了很多方法,MySQL启动成功了,但是第二天开启MySQL时还是出现了这个问题,现把两种方法总结一下,需要的朋友可以参考下2023-11-11
MySQL 5.0.96 for Windows x86 32位绿色精简版安装教程
这篇文章主要介绍了MySQL 5.0.96 for Windows x86 32位绿色精简版安装教程,需要的朋友可以参考下2017-10-10
LEFT JOIN条件在on后面和在where后面的区别及说明
这篇文章主要介绍了LEFT JOIN条件在on后面和在where后面的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-09-09


最新评论