学生表转横表
程序员文章站
2024-03-23 09:01:52
...
一、将如下学生表转换成横表
输出结果如下
1、解决思路
课程有语文、数学、英语,而每个人都选择了三门课,要求是将原表转换成横表,也就是将原来的姓名和课程字段转换成姓名和语文、数学、英语字段。将课程一拆为三就需要将每门课程对应的成绩取出来。
具体流程:
1.1、根据学生姓名分类 :
1. 2、按照课程名取成绩
case s.cname when ‘语文’ then s.score else 0 end
2、最终实现
select
s.name ,
sum(case s.cname when ‘语文’ then s.score else 0 end) ‘语文’,
sum(case s.cname when ‘数学’ then s.score else 0 end) ‘数学’,
sum(case s.cname when ‘英语’ then s.score else 0 end) ‘英语’
from tb_student s
group by name
3、为什么要使用聚合函数(sum)
(1)分组查询时除了字段后面只能跟聚合函数。
(2)在case 里面 选择当cname为‘语文’ 时取出其分数,但是在找到课程名为‘语文’之前可能和别的课程比较过了,所以要加上else 0。
(3)在这里只能是使用sum函数,在选择cname时比较不止一次,所以会产生多个else 0,这个时候只有sum函数能完成取对应课程成绩的功能。别的函数如AVG() 则会根据你比较的此处将成绩均分,这样得到的成绩就是你比较多次之后的平均成绩。
(4)使用AVG()函数得到的结果
(5)正确结果
上一篇: 数据库—连接查询
下一篇: CSV导入十万条数据到数据库
推荐阅读
-
学生表转横表
-
《注册V1.1》——————加入了查询数据库中的学生表,解决了中文乱码问题,以及一个Servlet解决多个请求的问题
-
学生成绩——顺序表
-
[转]MySQL对已存在的非分区表进行分区
-
mysql建库建表--学生管理系统,Python操作数据库
-
只需一条语句即可记住所有的ORACLE的系统表 博客分类: 数据库心得体会 oracle系统表语句 转自:http://wulinhaoxia5.iteye.com/blog/1518677 只需一条语句即可记住所有的ORACLE的系统表
-
oracle分区表总结(转) OracleExchange数据结构配置管理SQL
-
Oracle行列互换 横表和纵表 博客分类: 数据库 OracleSQLSQL Server数据结构C
-
Oracle 横表、纵表一点记录
-
Oracle 横表/纵表用场以及它们之间的相互转换