mysql 如何计算数据求和并排出名次

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43493955/article/details/83988845
请写出一条sql语句,计算学生表中的‘名次’字段(可以多条sql)

在这里插入图片描述

首先要计算每行的总和,使用mysql的函数SUM来计算

select id,name,age,address,teamid,SUM(chinese+math+english)
                           as totalscore from t_stu group by id order by totalscore desc

在这里插入图片描述

第一种情况:分数依次递减,然后设置名次的初始值为0,每次增加一

set @rank:=0;
select ta.*,@rank:=@rank+1 as rank from (select id,name,age,address,teamid,SUM(chinese+math+english)
                           as totalscore from t_stu group by id order by totalscore desc) as ta

在这里插入图片描述

第二种情况:如果有两个总分是一样的,那就要排成一样的名次

set @de:=0,@rank:=1;
select ta.*,if(@de > totalscore,@rank:=@rank+1,@rank),if(@de = totalscore,@rank:=@rank,@rank) as rank ,@de:=totalscore
 from (select id,name,age,address,teamid,SUM(chinese+math+english)
 as totalscore from t_stu group by id order by totalscore desc) as ta

在这里插入图片描述

展开阅读全文

一个名次计算问题

10-29

近来在做一个小开发的时候,对于名次的排序有点头大,麻烦大家帮看一下。rn数据库结构:rn用户编号 用户姓名 年度发帖 月度发帖 今日发帖rn120501115 张三 1584 162 29rn120522081 李四 487 327 0rn121427000 XX县 0 0 0rn121427157 王五 12 0 0rn122227002 赵六 2514 399 15rnrn........rnrn现在的问题在于,用户编号的前六位是地域编号,如12代表A省,05、14、22分别是B市、C市、D市,120501代表A省B市E区,122227代表A省D市F县…………rn客户要求在登录用户查看个人信息时,显示出他在全省、全市、全县的不同排名,如rnrn张三显示的是:rn今年以来:rn您是全省第二名,本市第一名,本区(县)第一名rn本月以来:rn您是全省第三名,本市第二名,本区(县)第一名rn今天:rn您是全省第一名,本市第一名,本区(县)第一名rnrn李四显示的是:rn今年以来:rn您是全省第三名,本市第二名,本区(县)第一名rn本月以来:rn您是全省第二名,本市第一名,本区(县)第一名rn今天:rn您的发帖量为0,不计算排名rnrn(只要是发帖量为0的,都可以直接不计算排名,当然这个步骤可以在ASP里来判断,SQL只要输出0就行了)rn数据表中共有用户信息约二万条,暂时都在一个省内,约有二十个地市,近二百个区县的数据,年度、月度、本日的数据我可以用定时作业先统计好,但排名就有点头大,还要大家帮我考虑一下怎么做比较好呢?rnrn如果发帖量相同的情况下,如果能并列前名次最好(也就是说可以一个第一名,三个第二名,而不是一个第一名,三个第四名这种),如果难做到的话,并列后名次也行。rnrn感谢大家! 论坛

没有更多推荐了,返回首页