美文网首页
MySQL分类排名问题

MySQL分类排名问题

作者: 一梦三四年lyp | 来源:发表于2020-05-08 18:11 被阅读0次

    实现对学生按课程依成绩高低进行排序

    建表:

    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;
    
    

    数据:

    1   张三  语文  80
    2   李四  语文  90
    3   王五  语文  93
    4   张三  数学  77
    5   李四  数学  68
    6   王五  数学  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
    
    查询结果:
    7   张三  英语  90  1
    1   张三  语文  80  2
    4   张三  数学  77  3
    2   李四  语文  90  1
    5   李四  数学  68  2
    8   李四  英语  50  3
    6   王五  数学  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
    
    查询结果:
    7   张三  英语  90  1
    1   张三  语文  80  2
    4   张三  数学  77  3
    2   李四  语文  90  1
    5   李四  数学  68  2
    8   李四  英语  50  3
    6   王五  数学  99  1
    3   王五  语文  93  2
    9   王五  英语  89  3
    

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

    相关文章

      网友评论

          本文标题:MySQL分类排名问题

          本文链接:https://www.haomeiwen.com/subject/etxqnhtx.html