zoukankan      html  css  js  c++  java
  • MySQL实现分组取组内特定数据的功能

    需求:在MySQL5.7环境下,查询下面表中,各个学科前两名的学生的成绩;

    1.准备数据

    窗机表以及向表中插入数据

    创建一张表:

    DROP TABLE IF EXISTS `grade`;
    CREATE TABLE `grade` (
      `id` int(11) DEFAULT NULL,
      `kemu` varchar(255) DEFAULT NULL,
      `score` int(255) DEFAULT NULL,
      `no` int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

     向表中插入数据:

    INSERT INTO `grade` VALUES ('1001', '语文', '85', '1');
    INSERT INTO `grade` VALUES ('1001', '数学', '86', '2');
    INSERT INTO `grade` VALUES ('1002', '英语', '98', '3');
    INSERT INTO `grade` VALUES ('1002', '语文', '94', '4');
    INSERT INTO `grade` VALUES ('1002', '数学', '98', '5');
    INSERT INTO `grade` VALUES ('1003', '数学', '56', '6');
    INSERT INTO `grade` VALUES ('1003', '语文', '69', '7');
    INSERT INTO `grade` VALUES ('1003', '英语', '68', '8');
    INSERT INTO `grade` VALUES ('1004', '英语', '99', '9');
    INSERT INTO `grade` VALUES ('1004', '数学', '97', '10');

    2.MySQL编写语句

    SELECT * from (
    SELECT g.id,g.kemu,g.score,count(*) as rank  from grade g 
    LEFT JOIN grade g1    
    on g.kemu=g1.kemu
    and g.score<=g1.score
    GROUP BY g.id,g.kemu,g.score
    ORDER BY g.id,g.kemu,g.score desc
    ) n where rank<=2 ORDER BY kemu,rank

    通过函数方式实现可以参考下面的链接:

    https://www.jianshu.com/p/32e8c40372b3

    http://blog.51cto.com/mydbs/2159794?source=dra

  • 相关阅读:
    JAVA设计模式---总述篇
    Java中对象创建时的内存分配
    for循环打印空心菱形的新方法
    springcloud2.X通过actuator加载配置无效问题
    golang-错误处理
    golang-字符串
    golang-方法和接口
    golang-结构体与指针
    golang-数组、切片、映射
    golang-流程控制
  • 原文地址:https://www.cnblogs.com/fanjc/p/10267938.html
Copyright © 2011-2022 走看看