学生课程行转列
-- 同一张表里
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;

浙公网安备 33010602011771号