mysql行转列
时间: 2023-06-30 15:24:33 浏览: 56
在 MySQL 中,可以使用以下方法将行数据转换为列数据:
1. GROUP_CONCAT() 函数:该函数可将多行数据合并为一行,并使用分隔符分隔开。
例如,有以下表结构:
```
CREATE TABLE scores (
id INT,
student VARCHAR(10),
subject VARCHAR(10),
score INT
);
INSERT INTO scores VALUES
(1, 'Tom', 'Math', 80),
(2, 'Tom', 'English', 75),
(3, 'Tom', 'Science', 85),
(4, 'Mike', 'Math', 90),
(5, 'Mike', 'English', 85),
(6, 'Mike', 'Science', 95);
```
现在要将每个学生的成绩转换为列数据,可以使用以下查询语句:
```
SELECT student,
GROUP_CONCAT(CASE WHEN subject = 'Math' THEN score END) AS math_score,
GROUP_CONCAT(CASE WHEN subject = 'English' THEN score END) AS english_score,
GROUP_CONCAT(CASE WHEN subject = 'Science' THEN score END) AS science_score
FROM scores
GROUP BY student;
```
查询结果如下:
```
+---------+------------+---------------+--------------+
| student | math_score | english_score | science_score |
+---------+------------+---------------+--------------+
| Mike | 90, | 85, | 95, |
| Tom | 80, | 75, | 85 |
+---------+------------+---------------+--------------+
```
2. PIVOT 操作符:该操作符可以用于将行数据转换为列数据。
例如,有以下表结构:
```
CREATE TABLE scores (
id INT,
student VARCHAR(10),
subject VARCHAR(10),
score INT
);
INSERT INTO scores VALUES
(1, 'Tom', 'Math', 80),
(2, 'Tom', 'English', 75),
(3, 'Tom', 'Science', 85),
(4, 'Mike', 'Math', 90),
(5, 'Mike', 'English', 85),
(6, 'Mike', 'Science', 95);
```
现在要将每个学生的成绩转换为列数据,可以使用以下查询语句:
```
SELECT *
FROM (
SELECT student, subject, score
FROM scores
) AS t
PIVOT (
MAX(score)
FOR subject IN ('Math', 'English', 'Science')
) AS p;
```
查询结果如下:
```
+---------+------+--------+---------+
| student | Math | English| Science |
+---------+------+--------+---------+
| Mike | 90 | 85 | 95 |
| Tom | 80 | 75 | 85 |
+---------+------+--------+---------+
```
以上就是在 MySQL 中将行数据转换为列数据的两种方法。