zoukankan      html  css  js  c++  java
  • 学生课程行转列

    -- 同一张表里
    
    SELECT user_name ,
        MAX(CASE course WHEN '数学' THEN score ELSE 0 END ) 数学,
        MAX(CASE course WHEN '语文' THEN score ELSE 0 END ) 语文,
        MAX(CASE course WHEN '英语' THEN score ELSE 0 END ) 英语
    FROM test_tb_grade
    GROUP BY USER_NAME;
    
    
    -- 不同的数据表里
    
    SELECT
        st.stu_id '学号',
        st.stu_name '姓名',
        sum(
            CASE co.course_name
            WHEN '大学语文' THEN
                sc.scores
            ELSE
                0
            END
        ) '大学语文',
        sum(
            CASE co.course_name
            WHEN '新视野英语' THEN
                sc.scores
            ELSE
                0
            END
        ) '新视野英语',
        sum(
            CASE co.course_name
            WHEN '离散数学' THEN
                sc.scores
            ELSE
                0
            END
        ) '离散数学',
        sum(
            CASE co.course_name
            WHEN '概率论与数理统计' THEN
                sc.scores
            ELSE
                0
            END
        ) '概率论与数理统计',
        sum(
            CASE co.course_name
            WHEN '线性代数' THEN
                sc.scores
            ELSE
                0
            END
        ) '线性代数',
        sum(
            CASE co.course_name
            WHEN '高等数学' THEN
                sc.scores
            ELSE
                0
            END
        ) '高等数学'
    FROM
        edu_student st
    LEFT JOIN edu_score sc ON st.stu_id = sc.stu_id
    LEFT JOIN edu_courses co ON co.course_no = sc.course_no
    GROUP BY
        st.stu_id
    ORDER BY
        NULL;
    

      

    同一张表里的数据

    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for test_tb_grade
    -- ----------------------------
    DROP TABLE IF EXISTS `test_tb_grade`;
    CREATE TABLE `test_tb_grade`  (
      `ID` int(10) NOT NULL AUTO_INCREMENT,
      `USER_NAME` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `COURSE` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `SCORE` float NULL DEFAULT 0,
      PRIMARY KEY (`ID`) USING BTREE,
      INDEX `ucs`(`USER_NAME`, `COURSE`, `SCORE`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of test_tb_grade
    -- ----------------------------
    INSERT INTO `test_tb_grade` VALUES (1, '张三', '数学', 34);
    INSERT INTO `test_tb_grade` VALUES (3, '张三', '英语', 58);
    INSERT INTO `test_tb_grade` VALUES (2, '张三', '语文', 58);
    INSERT INTO `test_tb_grade` VALUES (4, '李四', '数学', 45);
    INSERT INTO `test_tb_grade` VALUES (6, '李四', '英语', 45);
    INSERT INTO `test_tb_grade` VALUES (5, '李四', '语文', 87);
    INSERT INTO `test_tb_grade` VALUES (7, '王五', '数学', 76);
    INSERT INTO `test_tb_grade` VALUES (9, '王五', '英语', 89);
    INSERT INTO `test_tb_grade` VALUES (8, '王五', '语文', 34);
    
    SET FOREIGN_KEY_CHECKS = 1;
    

      

    不同的表里的数据

    /*
     Navicat Premium Data Transfer
    
     Source Server         : 本地服务
     Source Server Type    : MySQL
     Source Server Version : 80012
     Source Host           : localhost:3306
     Source Schema         : test
    
     Target Server Type    : MySQL
     Target Server Version : 80012
     File Encoding         : 65001
    
     Date: 15/12/2021 14:21:40
    */
    
    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for edu_courses
    -- ----------------------------
    DROP TABLE IF EXISTS `edu_courses`;
    CREATE TABLE `edu_courses`  (
      `course_no` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '课程编号',
      `course_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '课程名称',
      PRIMARY KEY (`course_no`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '课程表' ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of edu_courses
    -- ----------------------------
    INSERT INTO `edu_courses` VALUES ('C001', '大学语文');
    INSERT INTO `edu_courses` VALUES ('C002', '新视野英语');
    INSERT INTO `edu_courses` VALUES ('C003', '离散数学');
    INSERT INTO `edu_courses` VALUES ('C004', '概率论与数理统计');
    INSERT INTO `edu_courses` VALUES ('C005', '线性代数');
    INSERT INTO `edu_courses` VALUES ('C006', '高等数学');
    
    -- ----------------------------
    -- Table structure for edu_score
    -- ----------------------------
    DROP TABLE IF EXISTS `edu_score`;
    CREATE TABLE `edu_score`  (
      `stu_id` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '学号',
      `course_no` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '课程编号',
      `scores` float NULL DEFAULT NULL COMMENT '得分',
      PRIMARY KEY (`stu_id`, `course_no`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '成绩表' ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of edu_score
    -- ----------------------------
    INSERT INTO `edu_score` VALUES ('1001', 'C001', 67);
    INSERT INTO `edu_score` VALUES ('1001', 'C002', 87);
    INSERT INTO `edu_score` VALUES ('1001', 'C003', 83);
    INSERT INTO `edu_score` VALUES ('1001', 'C004', 88);
    INSERT INTO `edu_score` VALUES ('1001', 'C005', 77);
    INSERT INTO `edu_score` VALUES ('1002', 'C001', 68);
    INSERT INTO `edu_score` VALUES ('1002', 'C002', 88);
    INSERT INTO `edu_score` VALUES ('1002', 'C003', 84);
    INSERT INTO `edu_score` VALUES ('1002', 'C004', 89);
    INSERT INTO `edu_score` VALUES ('1002', 'C005', 78);
    INSERT INTO `edu_score` VALUES ('1003', 'C001', 69);
    INSERT INTO `edu_score` VALUES ('1003', 'C002', 89);
    INSERT INTO `edu_score` VALUES ('1003', 'C003', 85);
    INSERT INTO `edu_score` VALUES ('1003', 'C004', 90);
    INSERT INTO `edu_score` VALUES ('1003', 'C005', 79);
    INSERT INTO `edu_score` VALUES ('1004', 'C001', 70);
    INSERT INTO `edu_score` VALUES ('1004', 'C002', 90);
    INSERT INTO `edu_score` VALUES ('1004', 'C003', 86);
    INSERT INTO `edu_score` VALUES ('1004', 'C004', 91);
    INSERT INTO `edu_score` VALUES ('1005', 'C001', 71);
    INSERT INTO `edu_score` VALUES ('1005', 'C002', 91);
    INSERT INTO `edu_score` VALUES ('1005', 'C003', 87);
    INSERT INTO `edu_score` VALUES ('1005', 'C004', 92);
    INSERT INTO `edu_score` VALUES ('1006', 'C001', 72);
    INSERT INTO `edu_score` VALUES ('1006', 'C002', 92);
    INSERT INTO `edu_score` VALUES ('1006', 'C003', 88);
    INSERT INTO `edu_score` VALUES ('1006', 'C004', 93);
    
    -- ----------------------------
    -- Table structure for edu_student
    -- ----------------------------
    DROP TABLE IF EXISTS `edu_student`;
    CREATE TABLE `edu_student`  (
      `stu_id` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '学号',
      `stu_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '学生姓名',
      PRIMARY KEY (`stu_id`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '学生表' ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of edu_student
    -- ----------------------------
    INSERT INTO `edu_student` VALUES ('1001', '盲僧');
    INSERT INTO `edu_student` VALUES ('1002', '赵信');
    INSERT INTO `edu_student` VALUES ('1003', '皇子');
    INSERT INTO `edu_student` VALUES ('1004', '寒冰');
    INSERT INTO `edu_student` VALUES ('1005', '蛮王');
    INSERT INTO `edu_student` VALUES ('1006', '狐狸');
    
    SET FOREIGN_KEY_CHECKS = 1;
    

      

  • 相关阅读:
    python标准库之MultiProcessing库的研究 (1)
    python标准库Beautiful Soup与MongoDb爬喜马拉雅电台的总结
    ASP.NET平台下从浏览器地址栏输入之后发生的事
    async & await 异步编程的一点巧方法
    【MySQL】MySQL一主二从复制环境切换主从库
    【MySQL】MySQL基于二进制文件安装
    【MySQL】MySQL半同步复制
    【MySQL】MySQL搭建主主复制(双主复制/DUAL Master)环境
    【MySQL】MySQL复制
    【MySQL】MySQL搭建主从复制环境
  • 原文地址:https://www.cnblogs.com/dreamboycx/p/15692616.html
Copyright © 2011-2022 走看看