mysql行转列的简便方法
时间: 2023-10-24 07:27:22 浏览: 90
在 MySQL 中,将行转列的一种常见方法是使用 CASE 表达式和聚合函数。以下是一个简单的示例:
假设我们有一个名为 `student_scores` 的表,其中包含学生的姓名、科目和分数。现在我们想要将每个学生的分数按科目进行列转换。
表结构如下:
```
+----+-------+---------+
| id | name | subject |
+----+-------+---------+
| 1 | Alice | Math |
| 2 | Alice | English |
| 3 | Alice | Science |
| 4 | Bob | Math |
| 5 | Bob | English |
| 6 | Bob | Science |
+----+-------+---------+
```
我们可以使用以下查询来实现行转列:
```sql
SELECT
name,
MAX(CASE WHEN subject = 'Math' THEN score ELSE NULL END) AS Math,
MAX(CASE WHEN subject = 'English' THEN score ELSE NULL END) AS English,
MAX(CASE WHEN subject = 'Science' THEN score ELSE NULL END) AS Science
FROM
student_scores
GROUP BY
name;
```
结果如下:
```
+-------+------+---------+---------+
| name | Math | English | Science |
+-------+------+---------+---------+
| Alice | 90 | 85 | 92 |
| Bob | 95 | 88 | 91 |
+-------+------+---------+---------+
```
这样,每个学生的分数就被转换为了对应的科目列。对于每个科目,我们使用了一个 CASE 表达式来选择该科目对应的分数,并使用聚合函数 MAX 将其放入相应的列中。
请注意,上述方法在有限的列数情况下是可行的,但如果有大量的不同科目,手动编写每个 CASE 表达式可能会变得繁琐。在这种情况下,可以考虑使用动态 SQL 或存储过程来生成相应的查询语句。
阅读全文