MySQL行转列与列转行详解
行转列
在数据库处理过程中,有时候我们需要将表中的数据从行的形式转换为列的形式,这样的操作称为“行转列”。这种需求通常出现在对数据进行汇总或者特定展示时。下面通过一个具体的例子来详细解释如何在MySQL中实现行转列。
示例
假设我们有一个名为TEST_TB_GRADE
的成绩表,其中包含了学生姓名、课程名称以及成绩。表结构如下:
CREATE TABLE `TEST_TB_GRADE` (
`ID` int(10) NOT NULL AUTO_INCREMENT,
`USER_NAME` varchar(20) DEFAULT NULL,
`COURSE` varchar(20) DEFAULT NULL,
`SCORE` float DEFAULT '0',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
接着插入以下数据:
INSERT INTO TEST_TB_GRADE (USER_NAME, COURSE, SCORE) VALUES
('张三', '数学', 34),
('张三', '语文', 58),
('张三', '英语', 58),
('李四', '数学', 45),
('李四', '语文', 87),
('李四', '英语', 45),
('王五', '数学', 76),
('王五', '语文', 34),
('王五', '英语', 89);
现在我们需要将这个表格按照学生姓名分组,并将各科成绩转换为列形式。可以使用以下SQL语句实现:
SELECT USER_NAME,
MAX(CASE WHEN COURSE = '数学' THEN SCORE ELSE 0 END) AS 数学,
MAX(CASE WHEN COURSE = '语文' THEN SCORE ELSE 0 END) AS 语文,
MAX(CASE WHEN COURSE = '英语' THEN SCORE ELSE 0 END) AS 英语
FROM TEST_TB_GRADE
GROUP BY USER_NAME;
在这个例子中,我们使用了CASE
语句来根据不同的课程名进行分组和转换。