MySql语句实现排名

思路:设置一个变量并赋值初始值,循环一次自增加1,从而实现排序

三种排序

     1、将已经排好顺序的数据从头开始取出,每取一条自增加一;

     2、当出现相同数据时,排名保持不变,此时需要再设置一个变量,用来记录上一个数据的值,跟当前数据的值进行对比,如果相同,则排名不变,不相同则排名自增加一;

     3、当出现相同数据时,排名保持不变,保持不变的排名依旧占用一个位置。

 

1、创建一张表分数表

CREATE TABLE score (
    id INT (11) NOT NULL auto_increment,
    memberId VARCHAR(64) NOT NULL,
    score DOUBLE(5,2) NOT NULL,
    PRIMARY KEY(id)

)

2、添加数据

INSERT INTO score (memberId, score)
VALUES
(100, 50.5),
(101, 30.6),
(102, 20),
(103, 60.3),
(104, 80.8),
(105, 50.7),
(106, 70.9),
(107,20),
(108,80.8)

3、查询

      1、一次排列

select score.*,@scoreNum :=@scoreNum+1 as scoreNum from score,(select @scoreNum :=0) init  ORDER BY score DESC

        2、数据相同,排名保持不变,一次排序

select score.*,case when @score = score then @scoreNum when @score := score then @scoreNum :=@scoreNum+1 when @score =0 then @scoreNum :=@scoreNum+1 END as scoreNum from score,(select @scoreNum :=0,@score :=NULL) init  ORDER BY score DESC

      3、数据相同,排名保持不变,且占有字符

select score.*,@scoreNum1 :=@scoreNum1+1,@scoreNum := case when @score = score then @scoreNum when @score := score then @scoreNum1 when @score =0 then @scoreNum1 END as scoreNum from score,(select @scoreNum :=0,@score :=NULL,@scoreNum1 :=0) init  ORDER BY score DESC

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值