ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

学生课程行转列

2021-12-15 14:33:13  阅读:176  来源: 互联网

标签:INSERT score -- INTO 学生 转列 课程 VALUES edu


-- 同一张表里

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;

  

标签:INSERT,score,--,INTO,学生,转列,课程,VALUES,edu
来源: https://www.cnblogs.com/dreamboycx/p/15692616.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有