mysql数据库下行列转换笔记

SQL成绩查询与行列转换
本文介绍了一种SQL查询技巧,通过将多个表联结并使用条件聚合函数实现特定学生或多学生的课程成绩行列转换,方便地展示不同科目的成绩。

三张表:

student.sql

score.sql

courses.sql

首先把三张表都关联起来,然后开始使用行列转换,查询出效果如下:

代码如下:

select e.stu_id,e.stu_name,
 sum(if(e.course_name='大学语文',e.scores,0)) as "大学语文",
 sum(if(e.course_name='新视野英语',e.scores,0)) as "新视野英语",
 sum(if(e.course_name='离散数学',e.scores,0)) as "离散数学",
 sum(if(e.course_name='概率论与数理统计',e.scores,0)) as "概率论与数理统计",
 sum(if(e.course_name='线性代数',e.scores,0)) as "线性代数",
 sum(if(e.course_name='高等数学<一>',e.scores,0)) as "高等数学<一>"
from
(select a.*,d.course_name,d.scores from student a inner join
(select b.stu_id,b.course_no,b.scores,c.course_name from score b inner join courses c on b.course_no=c.course_no) d
on a.stu_id=d.stu_id and a.stu_id='1001') e;       ----------->查询张三的数据


select a.stu_id,a.stu_name,d.course_name,d.scores from student a inner join
 (select b.stu_id,b.course_no,b.scores,c.course_name from score b inner join courses c on b.course_no=c.course_no) d
on d.stu_id=a.stu_id;   ------------------>查询出所有的数据

select e.stu_id,e.stu_name,
 sum(if(e.course_name='大学语文',e.scores,0)) as "大学语文",
 sum(if(e.course_name='新视野英语',e.scores,0)) as "新视野英语",
 sum(if(e.course_name='离散数学',e.scores,0)) as "离散数学",
 sum(if(e.course_name='概率论与数理统计',e.scores,0)) as "概率论与数理统计",
 sum(if(e.course_name='线性代数',e.scores,0)) as "线性代数",
 sum(if(e.course_name='高等数学<一>',e.scores,0)) as "高等数学<一>"
from
(select a.stu_id,a.stu_name,d.course_name,d.scores from student a inner join
 (select b.stu_id,b.course_no,b.scores,c.course_name from score b inner join courses c on b.course_no=c.course_no) d
on d.stu_id=a.stu_id) e group by e.stu_id;     ------------------------->查询出所有的数据并且进行行列转换

 

注意:当需要展示多条数据时,必须加上group by 分组。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值