横表转为竖表
表tb的结构为
字段名 | 类型 | 允许为空 | 是否主键 |
---|---|---|---|
id | int(11) | no | yes |
姓名 | int(11) | yes | no |
语文 | decimal(3,1) | yes | no |
数学 | decimal(3,1) | yes | no |
英语 | decimal(3,1) | yes | no |
表中的数据为
id | 姓名 | 语文 | 数学 | 英语 |
---|---|---|---|---|
1 | 小张 | 89 | 80 | 89 |
2 | 小丽 | 69 | 78 | 98 |
现在要求查询到如下结果
name | subject | score |
---|---|---|
小丽 | 语文 | 69 |
小丽 | 数学 | 78 |
小丽 | 英语 | 79 |
小张 | 语文 | 89 |
小张 | 数学 | 80 |
小张 | 英语 | 89 |
使用的SQL查询语句应该如下:
1 | select 姓名 as name, '语文' as subject, 语文 as score from tb |
或者
1 | select * from( |
竖表转为横表
tb2表的结构如下
字段名 | 类型 | 允许为空 | 是否主键 |
---|---|---|---|
id | int(11) | no | yes |
name | varchar(255) | yes | no |
subject | varchar(255) | yes | no |
score | decimal(3,1) | yes | no |
tb2的数据如下
id | name | subject | score |
---|---|---|---|
2 | 小丽 | 英语 | 98 |
3 | 小丽 | 数学 | 78 |
6 | 小张 | 语文 | 89 |
5 | 小张 | 数学 | 80 |
4 | 小张 | 英语 | 89 |
1 | 小丽 | 语文 | 69 |
现在想把tb2的数据变为
姓名 | 语文 | 英语 | 数学 |
---|---|---|---|
小丽 | 68 | 98 | 78 |
小张 | 89 | 89 | 80 |
查询的SQL语句如下:
1 | select name as '姓名', |
现在要求得到如下查询结果
姓名 | 语文 | 数学 | 英语 | 总分 | 平均分 |
---|---|---|---|---|---|
小丽 | 69 | 78 | 98 | 245 | 81.6666667 |
小张 | 89 | 80 | 89 | 258 | 86 |
SQL查询语句应该为:
1 | select `name` as 姓名, |