mysql查询如何实现每个人每科成绩的排名

mysql查询如何实现每个人每科成绩的排名,第1张

MYSQL 如果强行实现,查询逻辑会变的很复杂,不符合实际

计算最好是在PHP里面

$data //比如查询结果返回给DATA 的二维数组

foreach($data as $vo){

    $math[$vo['name']] = $vo['数学'];

    $langue[$vo['name']] = $vo['语文'];

    $englist[$vo['name']] = $vo['英语'];

}

arsort($math);

arsort($langue);

arsort($englist);

$i = 1;

foreach($math as $key=>$vo){

    $res[$key]['数学'] =  $i;

}

$i = 1;

foreach($langue as $key=>$vo){

    $res[$key]['语文'] =  $i;

}

$i = 1;

foreach($englistas $key=>$vo){

    $res[$key]['英语'] =  $i;

}

这个如果想要性能的话,就用下面的sql语句实现:

select orderNo from (select (@rowNum:=@rowNum+1) orderNo , userid ,pid from TABLE,(Select (@rowNum :=0) ) b )t where tuserid=2694

然后php获得这条结果数组,取第一个元素即是排序

如果对这个sql语句有疑问,不明白,可以使用一个比较耗费性能的方法:

select userid from record

执行这条语句,获得一个数组$res

遍历前设置一个记录排序的标识 $seq=1;

for(){

$userid=$res['userid'];//把第seq 个位置的学号拿出来,跟想要的学号比

if($userid==2694){

break;

}

$seq++;

}

//如果 这个排序标识比结果集数组大小还大,说明没这个userid的记录。

$seq就是排序

我没有测试 你可以自己试一下

建议你用程序来完成。这个涉及计算列排序,排序的多重方式,各个数据库估计写法都不同。

---

如果你硬要用sql完成可以用如下方式:

记住只在mysql里能这么写。幸好你的是mysql

---------

SELECT Mclass,MAvgS,Mpm

FROM

(

SELECT A,@rank:=@rank+1 as pm

FROM

(

SELECT class,avg(score) as AvgS FROM testchengji GROUP BY class ORDER BY AvgS DESC

) A ,(SELECT @rank:=0) B

) M

ORDER BY Mclass

--------

pm 代表排名

---

结果类似:

class AvgS pm

-----------------------

'1', '470000', '1'

'2', '120000', '3'

'5', '385000', '2'

------------------------

以上就是关于mysql查询如何实现每个人每科成绩的排名全部的内容,包括:mysql查询如何实现每个人每科成绩的排名、mysql数据库中数据的排名问题、mysql 中如何获取分类平均值的名次 比如10个班级的平均分,按照班级名称排序,后面跟着名次。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9297130.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存