MySQL分類排名問題

實現(xiàn)對學(xué)生按課程依成績高低進行排序

建表:

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `course` varchar(20) DEFAULT NULL,
  `score` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

數(shù)據(jù):

1   張三  語文  80
2   李四  語文  90
3   王五  語文  93
4   張三  數(shù)學(xué)  77
5   李四  數(shù)學(xué)  68
6   王五  數(shù)學(xué)  99
7   張三  英語  90
8   李四  英語  50
9   王五  英語  89

子查詢

SELECT
    *, (
        SELECT
            COUNT(b.score) + 1
        FROM
            test b
        WHERE
            a. NAME = b. NAME
        AND a.score < b.score
    ) AS 'rank'
FROM
    test a
ORDER BY
    NAME,
    rank

查詢結(jié)果:
7   張三  英語  90  1
1   張三  語文  80  2
4   張三  數(shù)學(xué)  77  3
2   李四  語文  90  1
5   李四  數(shù)學(xué)  68  2
8   李四  英語  50  3
6   王五  數(shù)學(xué)  99  1
3   王五  語文  93  2
9   王五  英語  89  3

自連接

SELECT 
    a.*, COUNT(b.score)+1 AS 'rank'
FROM 
    test a LEFT JOIN test b ON (a.name = b.name  AND a.score < b.score)
GROUP BY 
    a.name, a.score,a.course
ORDER BY 
    a.name, COUNT(b.score) asc

查詢結(jié)果:
7   張三  英語  90  1
1   張三  語文  80  2
4   張三  數(shù)學(xué)  77  3
2   李四  語文  90  1
5   李四  數(shù)學(xué)  68  2
8   李四  英語  50  3
6   王五  數(shù)學(xué)  99  1
3   王五  語文  93  2
9   王五  英語  89  3

參考:
https://mp.weixin.qq.com/s/s8EiV-oKNR4n9Goe4gIAOw

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容