1.横表变纵表
subject表的表结构如下图
我们普通查询:
select * from SUBJECT
查询结果:
我们想要将这种方式变为纵表:
查询语句如下:
select * from (select `name`,yuwen as score,"语文" as subject from SUBJECT
UNION
select `name`,shuxue as score,"数学" as subject from SUBJECT
UNION
select `name`,yingyu as score,"英语" as subject from SUBJECT
) tb
ORDER BY `name`
最终结果:
2.纵表变横表
表结构如下图:
正常查询结果如下图所示:
我们需要变成如下显示:
查询语句如下:
通过 case 语句,成功把字段从纵表中取出,但是此时仍算不上一个横表,
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 ) 英语,
SUM(score) as 总分,
avg(score) as 平均分
from score
GROUP BY `name`
查询结果如图所示:
3.优缺点
**横表:**表结构更加的清晰明了,关联查询的一些sql语句也更容易,方便易于后续开发人员的接手,但是如果字段不够,需要新增字段,会改动表结构。
*横表:**表结构更加的清晰明了,关联查询的一些sql语句也更容易,方便易于后续开发人员的接手,但是如果字段不够,需要新增字段,会改动表结构。
**纵表:**扩展性更高,如果要增加一个字段,不需要改变表结构,但是一些关联查询会更加麻烦,也不便于维护与后续人员接手。