mysql数据库行转列

一、题目

有一张成绩表grade

有name,course,score三个字段

具体数据如下

二、题目要求

现在要求查询返回以下形式的数据

三、实现

原表数据是每科成绩都是以行展示

题目要求的数据是每科成绩以列展示

可以用三个case when来实现

case when course = '语文' then score end as Chinese_grade

case when course = '数学' then score end as math_grade

case when course = '英语' then score end as english_grade

效果如下

但是每个人的成绩还是有三条,需要用分组函数,再对成绩取最大值

select

name,

max(case when course = '语文' then score end) as Chinese_grade,

max(case when course = '数学' then score end) as math_grade,

max(case when course = '英语' then score end) as english_grade

from grade

group by name;

如果case when语句case when course = '语文' then score end as Chinese_grade 加一个else:

case when course = '语文' then score else 0 end as Chinese_grade

那也可以用sum进行求和

四、由二的数据变为一里面的数据(列转行)

select

name,

course,

score

from

(

select name, '语文' as course,Chinese_grade as score from grade

Union all

select name, '数学' as course,math_grade as score from grade

Union all

select name, '英语' as course,english_grade as score from grade

)

order by name

相关推荐
小江的记录本18 分钟前
【Swagger】Swagger系统性知识体系全方位结构化总结
java·前端·后端·python·mysql·spring·docker
辰风沐阳1 小时前
MySQL 联合索引
数据库·mysql
问道飞鱼1 小时前
【数据库相关】MySQL全分类SQL详解(超多数据类型+全约束+实战落地)
数据库·sql·mysql·范例
fzb5QsS1p7 小时前
MySQL 事务的二阶段提交是什么?
数据库·mysql
2601_9498146911 小时前
使用mysql报Communications link failure异常解决
数据库·mysql
#六脉神剑12 小时前
MySQL参数调优:十个关键参数助力数据库性能数倍提升
运维·mysql
bearpping13 小时前
MySQL压缩版安装详细图解
android·mysql·adb
道清茗17 小时前
【MySQL知识点问答题】高级复制技术
数据库·mysql
qq_2837200517 小时前
MySQL 8.0 与 5.7 全维度深度对比:核心差异、技术演进与新手选型终极指南
mysql·性能对比
EFCY1MJ9018 小时前
MYSQL ID耗尽应急恢复方案
java·数据库·mysql