MySQL行转列
时间: 2023-07-22 22:05:19 浏览: 100
mysql 行转列和列转行实例详解
MySQL中可以使用GROUP_CONCAT函数将多行数据合并成一行,从而实现行转列的功能。以下是一个示例:
假设有如下表结构:
```
CREATE TABLE `scores` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`subject` varchar(50) DEFAULT NULL,
`score` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;
```
其中,name表示学生姓名,subject表示课程名称,score表示分数。
现在需要将每个学生的分数转换为列,即行转列。可以使用如下SQL语句:
```
SELECT
name,
GROUP_CONCAT(CASE WHEN subject = 'math' THEN score ELSE NULL END) AS math_score,
GROUP_CONCAT(CASE WHEN subject = 'english' THEN score ELSE NULL END) AS english_score,
GROUP_CONCAT(CASE WHEN subject = 'physics' THEN score ELSE NULL END) AS physics_score
FROM scores
GROUP BY name;
```
这个查询语句会将每个学生的数学、英语和物理分数分别合并成一行,结果如下:
```
+------+------------+---------------+---------------+
| name | math_score | english_score | physics_score |
+------+------------+---------------+---------------+
| Tom | 90,80 | 85,88 | 92,85 |
| Bob | 78,85 | 90,92 | 76,82 |
+------+------------+---------------+---------------+
```
其中,每个学生的分数对应的列名为math_score、english_score和physics_score。注意,如果某个学生的某个科目没有成绩,则对应的分数为NULL,而不是空字符串。
阅读全文