手记

数据库知识点(2)——行转列

此篇以统计学生各科成绩为例,介绍数据行转列的方法。
首先创建三个表student(学生)、subject(学科)、score(学生各科成绩),具体如下:
学生表

科目表

学生各科成绩表

学生成绩一览表

按学生总成绩排名

展示学生各科成绩并且按照总成绩排名


小记:
1、使用 case when a=b then .... else ....end 的方式找出符合条件的数据,并给该列命名。

4人推荐
随时随地看视频
慕课网APP

热门评论

SELECT a.name 姓名,SUM(b.score) 总分
FROM student a,score b WHERE a.id=b.student_id
GROUP BY a.name  ORDER BY 总分 DESC
SELECT a.name 姓名,SUM(b.score) 总分
FROM student a JOIN score b ON a.id=b.student_id
GROUP BY a.name  ORDER BY 总分 DESC


SELECT a.name 姓名,c.subject 科目,b.score 成绩
FROM student a JOIN score b ON a.id=b.student_id JOIN SUBJECT c ON b.subject_id=c.id


CREATE TABLE `mysql`.`student`( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(5) CHARSET utf8 COLLATE utf8_general_ci, PRIMARY KEY (`id`) ) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci;
CREATE TABLE `mysql`.`subject`( `id` INT NOT NULL AUTO_INCREMENT, `subject` VARCHAR(5) CHARSET utf8 COLLATE utf8_general_ci, PRIMARY KEY (`id`) ) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci;
 CREATE TABLE `mysql`.`score`( `id` INT NOT NULL AUTO_INCREMENT, `student_id` INT, `subject_id` INT, `score` INT, PRIMARY KEY (`id`) ) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci;


查看全部评论