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

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

横表

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

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

纵表

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

缺点:数据描述不是很清晰,而且会造成数据库数据很多。另如果需要分组统计,要先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';

转换结果;
结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值