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个班级的平均分,按照班级名称排序,后面跟着名次。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)