mysql行列转换

来源:互联网 发布:星际战甲奶妈回蓝算法 编辑:程序博客网 时间:2024/05/17 23:39

一;列转行

 1:创建表

 CREATE TABLE `score` (  `name` varchar(10) DEFAULT NULL,  `course` varchar(10) DEFAULT NULL,  `score` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8

   

--->>>插入数据

INSERT INTO score(NAME, COURSE, SCORE) VALUES
("张三", "语文", 88),
("张三", "数学", 92),
("张三", "物理", 93),
("李四", "语文", 79),
("李四", "数学", 99),
("李四", "物理", 94)



查询 SELECT * FROM score

name    course   score  
------  ------  --------
张三      语文            88
张三      数学            92
张三      物理            93
李四      语文            79
李四      数学            99
李四      物理            94

2:转换语句

CREATE VIEW  aaa AS
SELECT NAME, 
SUM(CASE WHEN course = '语文' THEN score ELSE 0 END) AS "语文",
SUM(CASE WHEN course = '数学' THEN score ELSE 0 END) AS "数学",
SUM(CASE WHEN course = '物理' THEN score ELSE 0 END) AS "物理"
FROM score GROUP BY NAME;


select * from aaa;

NAME    语文  数学  物理  
------  ------  ------  --------
张三      88      92      93      
李四      79      99      94 
    



二:行转列(使用上面的aaa视图横表)

1.转换语句

SELECT NAME,'语文' course,语文 soure FROM aaa
UNION  SELECT NAME,'数学' course,数学 soure FROM aaa
UNION  SELECT NAME,'物理' course,物理 soure FROM aaa
ORDER BY NAME,course;

2.结果

name    course  soure   
------  ------  --------
张三      数学      92      
张三      物理      93      
张三      语文      88      
李四      数学      99      
李四      物理      94      
李四      语文      79      


三:拓展(GROUP_CONCAT(param)和group连用)

1语句:

SELECT NAME ,GROUP_CONCAT(course) courses ,GROUP_CONCAT(score) scores 

FROM score GROUP BY NAME;

2结果:

me    courses                scores    
------  -------------------  ----------
张三      语文,数学,物理            88,92,93  
李四      语文,数学,物理              79,99,94  










原创粉丝点击