mysql设置变量用来排序_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 |

+------+------+-------+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值