mysql如何进行统计求和并计算出名次

本文介绍如何使用MySQL编写复杂的排名查询语句,包括求和、分组、条件筛选及排名算法等,特别适用于需要处理人员得分统计及排名场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对表中人员的score进行求和然后计算出名次字段

对应的mysql语句为:

 select personID, totalScore,personName,
        if(@de > totalScore, @rank:=@rank+@num+1, @rank) rank,
        if(@de = totalScore, @num:=@num, @num:=0),
        @de:=totalScore  from(
        select @de:=0, @rank:=1, @num:=0,personName,personID,sum(score) totalScore
        from  person
        group by personID,personName order by totalScore desc) tmp
执行之后计算出的结果为:


rank为统计排名的名次。

名次有的需求或许不是需要 1 2 2 3形式的排名,而是需要 1  2 2 4

那么只需要把sql语句改为

 select personID, totalScore,personName,
        if(@de > totalScore, @rank:=@rank+@num+1, @rank) rank,
        if(@de = totalScore, @num:=@num+1, @num:=0),
        @de:=totalScore  from(
        select @de:=0, @rank:=1, @num:=0,personName,personID,sum(score) totalScore
        from  person 
        group by personID,personName order by totalScore desc) tmp
即可

结果显示为:


如果需要给查询的数据加条件,比如只对personID 为1001,1003的人员进行统计排名:

 select personID, totalScore,personName,
        if(@de > totalScore, @rank:=@rank+@num+1, @rank) rank,
        if(@de = totalScore, @num:=@num, @num:=0),
        @de:=totalScore  from(
        select @de:=0, @rank:=1, @num:=0,personName,personID,sum(score) totalScore
        from  person where personID in ("1001","1003")
        group by personID,personName order by totalScore desc) tmp
结果为:




接下来是统计某人的数据以及排名情况:

select personID, totalScore, personName, rank from (
 select personID, totalScore,personName,
        if(@de > totalScore, @rank:=@rank+@num+1, @rank) rank,
        if(@de = totalScore, @num:=@num, @num:=0),
        @de:=totalScore  from(
        select @de:=0, @rank:=1, @num:=0,personName,personID,sum(score) totalScore
        from person
        group by personID,personName order by totalScore desc) tmp ) tmp2 where personID="1003"

计算结果为:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值