相关建表语句:java
CREATE TABLE `table1` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', `username` varchar(50) DEFAULT NULL COMMENT '姓名', `course` varchar(50) DEFAULT NULL COMMENT '科目', `grade` double DEFAULT NULL COMMENT '分数', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='纵表' INSERT INTO `table1` (username,course,grade) VALUES('张三','语文',90); INSERT INTO `table1` (username,course,grade) VALUES('李四','英语',88); INSERT INTO `table1` (username,course,grade) VALUES('王五','数学',60); INSERT INTO `table1` (username,course,grade) VALUES('张三','英语',120);
纵表转横表后结果:sql
相关sql语句:数据库
SELECT username, SUM(CASE course WHEN '语文' THEN grade ELSE 0 END) AS 'chinese', SUM(CASE course WHEN '数学' THEN grade ELSE 0 END) AS 'marth', SUM(CASE course WHEN '英语' THEN grade ELSE 0 END) AS 'english' FROM Table1 GROUP BY username
把转换后的结果建立为一个新表,相关sql:函数
CREATE TABLE table2 SELECT id id,username, SUM(CASE course WHEN '语文' THEN grade ELSE 0 END) AS 'chinese', SUM(CASE course WHEN '数学' THEN grade ELSE 0 END) AS 'marth', SUM(CASE course WHEN '英语' THEN grade ELSE 0 END) AS 'english' FROM Table1 GROUP BY username; ALTER TABLE table2 COMMENT '横表';
此时,把简单的横表数据结果,调整为以下截图所示:
大数据
相关sql代码:spa
UPDATE `table2` SET chinese = 80,marth = 90,english=70 WHERE id = 1; UPDATE `table2` SET chinese = 90,marth = 85,english=95 WHERE id = 2; UPDATE `table2` SET chinese = 88,marth = 75,english=90 WHERE id = 3;
横表转纵表结果: 设计
相关sql代码:code
SELECT username,'chinese' AS course,chinese AS grade FROM table2 UNION ALL SELECT username,'marth' AS course,marth AS grade FROM table2 UNION ALL SELECT username,'english' AS course,english AS grade FROM table2 ORDER BY username,course DESC
规则:orm
case 变量表达式 --对某个‘变量表达式’进行判断 when 值 --当‘变量表达式’是某个‘值’时 then 返回值表达式 --返回‘返回值表达式’值 [when... then... .....] --能够进行屡次判断 [else 其余状况返回值表达式] --不符合全部when后面的就是其余状况了 end --结束
横表:后台数据库管理员操做简单,直观,清晰可见,一目了然。但若要给横表中添加一个或者多个字段,就须重建表结构。ci
纵表:对于横表的弊端,纵表中只须要添加一条记录,就能够添加一个字段,所消耗的代价远比横表小。可是纵表的对于数据描述不是很清晰,并且会形成数据库数量不少。在查询的时候用到group等函数会大大下降执行效率。纵表的初始映射要慢一些,纵表的变动的映射可能要快一些,若是只是改变了单个字段时,毕竟横表字段比纵表要多不少。
1.在平时的开发过程当中,可能会遇到字段的添加或者更好的维护和管理大数据量的表,就 会涉及到纵表和横表之间的转换。
2.把不容易改动表结构的设计成横表,把容易常常改动不肯定的表结构设计成纵表。