纵表和横表的相互转换与自我理解
程序员文章站
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';
转换结果;
上一篇: 安史之乱不解之谜,安禄山为何这么轻易就打到了长安?
下一篇: 新上任的快递小哥