一;列转行
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