sql中的纵表与横表的转换

今天,回顾了一下sql的纵表和横表的转换 写一下

给出表1和表2要求出里面数据的平均值

表1:

 sid name chain math english
0001 张三 96 86 76

表2:

name subject score
张三 chain 96
张三 math  86
张三 english 76

 

现把转换方式列举如下:

1、横表转纵表

我的横表的样子是如下

sid name chain math english
0001 张三 96 86 76

转为纵表的sql语句为

SELECT s.`name`,AVG(score) FROM (

SELECT name,CHAIN score FROM student
UNION
SELECT name,math score FROM student
UNION
SELECT name,english score FROM student
)s GROUP BY s.`name`;

这样就可以出来name为张三的三门成绩的平均值

sql出来的效果为:

name AVG(score)
张三 97.000

 

 

2、纵表转横表

我的表格为下图

 name subject score
张三 chain 96
张三 math  86
张三 english 76

转为横表的sql为:

SELECT s.`name`,
SUM(case subject WHEN 'chain' THEN score ELSE 0 end)as 语文,
SUM(case subject WHEN 'math' THEN score ELSE 0 end)as 数学,
SUM(case subject WHEN 'english' THEN score ELSE 0 end)as 英语
FROM stuk s
GROUP BY s.`name`

这样转换的表的效果为

name 语文 数学 英语
张三 96 86 76
posted @ 2016-11-11 16:04  pybj  阅读(880)  评论(0)    收藏  举报