欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

纵表和横表的相互转换与自我理解

程序员文章站 2022-05-09 16:14:32
...

纵表和横表的相互转换与自我理解

横表

优点:一行表示了一个实体记录,清晰可见,一目了然。

缺点:如果现在要给这个表加一个字段,那么就必须重建表结构

纵表

优点:如果现在要给这个表加一个字段,只需要添加一些记录。

缺点:数据描述不是很清晰,而且会造成数据库数据很多。另如果需要分组统计,要先group by,较繁琐。

结论

应该把不容易改动表结构的设计成横表,把容易经常改动不确定的表结构设计成纵表

纵表转横表

先有纵表student(学生表),字段名就比较直观化
纵表和横表的相互转换与自我理解
怎么把他变成我们想要的横表呢
纵表和横表的相互转换与自我理解
下面就是SQL语句

select s.`name` '姓名',
SUM(case s.kemu when '语文' then s.chengji else 0 end) as '语文',
SUM(case s.kemu when '数学' then s.chengji else 0 end) as '数学',
SUM(case s.kemu when '英语' then s.chengji else 0 end) as '英语'
from student s
group by s.`name`;

这个是最直观的,也是特别简介易懂的.

SUM(case s.kemu when ‘语文’ then s.chengji else 0 end) as ‘语文’

单独进行一个个成绩的处理.取科目为’语文’的值其他取0进行求和
这里SUM也可以换成其他函数来结合需求处理比如MAX,MIN等等…

横表转纵表

先有横表student(学生表),字段名就比较直观化
纵表和横表的相互转换与自我理解
怎么把他变成我们想要的纵表呢

select  s.姓名,
s.语文 as 'chengji',
'语文' as 'kemu'
from student s
 
union all 
 
select  s.姓名,
s.数学 as 'chengji',
'数学' as 'kemu'
from student s
 
union all 
 
select  s.姓名,
s.英语 as 'chengji',
'英语' as 'kemu'
from student s
 
order by s.姓名, 'kemu';

转换结果;
纵表和横表的相互转换与自我理解