纵表和横表的概念及其相互转换
来源:互联网 发布:东方财富网python面试 编辑:程序博客网 时间:2024/06/07 01:51
引自:http://blog.csdn.net/zhangzeyuaaa/article/details/50675058
横表就是普通的建表方式,如表结构为:主键、字段1、字段2、字段3...。 如果变成纵表后,则表结构为: 主键、字段代码、字段值。而字段代码则为字段1、字段2、字段3...。 具体为电信行业的例子。以用户帐单表为例,一般出账时用户有很多费用,其数据一般存储为:时间,客户ID,费用科目,费用。这种存储结构一般称为纵表,其特点是行数多,字段少。纵表在使用时由于行数多,统计用户数或对用户进行分档时还需要进行GROUP BY 操作,性能低,且操作不便,为了提高性能,通常根据需要将纵表进行汇总,形成横表,比如:时间、客户ID、基本通话费、漫游通话费、国内长途费、国际长途费...。
横表
优点:一行表示了一个实体记录,清晰可见,一目了然。
缺点:如果现在要给这个表加一个字段,那么就必须重建表结构。
纵表
优点:如果现在要给这个表加一个字段,只需要添加一些记录。
缺点:数据描述不是很清晰,而且会造成数据库数据很多。另如果需要分组统计,要先group by,较繁琐。
结论
应该把不容易改动表结构的设计成横表,把容易经常改动不确定的表结构设计成纵表。
纵表转横标
有如下纵表:
将其转为横表:
- select
- s.student_name,
- sum(case s.subject when '语文' then s.score end) as 语文,
- sum(case s.subject when '数学' then s.score end) as 数学,
- sum(case s.subject when '英语' then s.score end) as 英语
- from score_vertical s
- group by s.student_name
横表转纵表
有如下横表:
将其转为纵表:
- select s.student_name,
- '语文' as 科目,
- s.语文 as 成绩
- from score_horizontal s
- union all
- select s.student_name,
- '数学' as 科目,
- s.数学 as 成绩
- from score_horizontal s
- union all
- select s.student_name,
- '英语' as 科目,
- s.英语 as 成绩
- from score_horizontal s
- order by student_name, 科目
结果:
0 0
- 纵表和横表的概念及其相互转换
- 纵表和横表的概念及其相互转换
- 纵表和横表的概念及其相互转换
- 纵表和横表的概念及其相互转换
- MySQL横表和纵表的相互转换
- 竖表和横表之间的相互转换
- MYSQL中竖表和横表之间的相互转换
- MySQL中竖表和横表之间的相互转换
- MYSQL中竖表和横表之间的相互转换
- MySQL中竖表和横表之间的相互转换
- MySQL中竖表和横表之间的相互转换
- MySQL中竖表和横表之间的相互转换
- RGB,YUV的来历及其相互转换
- RGB,YUV的来历及其相互转换
- RGB,YUV的来历及其相互转换
- RGB,YUV的来历及其相互转换
- RGB,YUV的来历及其相互转换
- RGB,YUV的来历及其相互转换
- 线程创建、等待、终止
- _onexit函数的使用 完成主函数执行完毕后再执行一段程序
- java中的“宏定义”
- linux 重启网卡 Device eth0 has different MAC address than expected,
- 第九周 oj训练 大奖赛计分
- 纵表和横表的概念及其相互转换
- 洛谷 P2409 Y的积木
- weka:Not enough memory. Please load a smaller dataset or use larger heap size.
- Android之进度条控件和常用资源分类总结
- 题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位. 提示:用数组完成
- 设置iptables允许ssh、http、ftp服务
- iOS10地图定位 适配各版本
- Session
- Tab导航实现