mysql 横表和纵表转换

(1)表tb1有如下数据:

姓名                     语文                        数学                    物理

张三                       68                           89                        99

李四                      90                            66                         78

现在要求写出查询语句得到如下查询结果

name                    subject                       score

张三                       语文                           68
张三                       数学                           89
张三                       物理                            99
李四                       语文                            90
李四                      数学                            66
李四                       物理                            78

sql语句如下:

?
1
2
3
4
5
6
select 姓名 as name , '语文' as subject,语文 as score from tb1
union
select 姓名 as name , '数学' as subject,数学 as score from tb1
union
select 姓名 as name , '物理' as subject,物理 as score from tb1
order by name



或者:

?
1
2
3
4
5
6
7
8
select * from (
select 姓名 as name , '语文' as subject,语文 as score from tb1
union
select 姓名 as name , '数学' as subject,数学 as score from tb1
union
select 姓名 as name , '物理' as subject,物理 as score from tb1
)tb
order by name



(2)tb2表有如下数据:

name              subject                  score

张三               语文                       74
张三                英语                      88
张三                物理                       90
李四                语文                      88
李四                英语                      67
李四                物理                        95

通过查询得到如下数据:

姓名         语文                  英语                     物理

张三          74                   88                        90
李四           88                    67                        95

sql语句如下:

?
1
2
3
4
5
6
select name as '姓名' ,
max ( case subject when '语文' then score else 0 end ) 语文,
         max ( case subject when '英语' then score else 0 end ) 英语,
         max ( case subject when '物理' then score else 0 end )物理
from tb2
group by name



现在要求写出查询语句得到如下结果:

姓名         语文                  英语                     物理            总分                平均分

张三          74                    88                        90               252                    84
李四           88                    67                        95                250                    83.33

sql:

?
1
2
3
4
5
6
7
8
select name '姓名' ,
max ( case subject when '语文' then result else 0 end ) 语文,
max ( case subject when '物理' then result else 0 end ) 物理,
max ( case subject when '英语' then result else 0 end )英语,
sum (result) as 总分,
avg (result) as 平均分
from tb
group by name

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值