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

数据表格式如下

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;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-12-14
SELECT
t. NAME,
(
SELECT
tt11.rowno
FROM
(
SELECT
tt1.rowno,
tt1. NAME
FROM
(
SELECT
@rowno :=@rowno + 1 AS rowno,
TestTab.*
FROM
TestTab,
(SELECT @rowno := 0) b
ORDER BY
TestTab.语文 DESC
) tt1
) tt11
WHERE
tt11. NAME = t. NAME
) 语文,
(
SELECT
tt11.rowno
FROM
(
SELECT
tt1.rowno,
tt1. NAME
FROM
(
SELECT
@rowno :=@rowno + 1 AS rowno,
TestTab.*
FROM
TestTab,
(SELECT @rowno := 0) b
ORDER BY
TestTab.数学 DESC
) tt1
) tt11
WHERE
tt11. NAME = t. NAME
) 数学,
(
SELECT
tt11.rowno
FROM
(
SELECT
tt1.rowno,
tt1. NAME
FROM
(
SELECT
@rowno :=@rowno + 1 AS rowno,
TestTab.*
FROM
TestTab,
(SELECT @rowno := 0) b
ORDER BY
TestTab.英语 DESC
) tt1
) tt11
WHERE
tt11. NAME = t. NAME
) 英语
FROM
testtab t;

查询结果:

相似回答