mysql 分组行转列
时间: 2023-07-07 17:42:55 浏览: 82
你可以使用 MySQL 的 GROUP_CONCAT 函数和子查询来将分组后的行转换为列,具体步骤如下:
1. 使用 GROUP BY 子句分组数据;
2. 在 SELECT 子句中使用 GROUP_CONCAT 函数来将分组后的行合并为一个字符串;
3. 将子查询的结果作为新的列插入到原始数据表中。
下面是一个示例代码:
```
SELECT
name,
GROUP_CONCAT(IF(score_type = 'math', score, NULL)) AS math_score,
GROUP_CONCAT(IF(score_type = 'english', score, NULL)) AS english_score,
GROUP_CONCAT(IF(score_type = 'science', score, NULL)) AS science_score
FROM
scores
GROUP BY
name;
```
这个查询语句将 scores 表按照 name 字段进行分组,然后将每个分组内的 math、english、science 的成绩合并为一个字符串,作为新的列返回。注意,这里使用了 IF 函数来判断每个成绩的类型是 math、english 还是 science。
相关问题
MySQL 分组 行转列
您可以使用MySQL中的GROUP_CONCAT函数将分组后的行转换为列。以下是一个示例查询:
```
SELECT
category,
GROUP_CONCAT(DISTINCT product_name SEPARATOR ', ') AS products
FROM
products
GROUP BY
category;
```
这将以“category”列为分组依据,然后将每个类别的“product_name”列的值合并为一个字符串,并将其作为新列“products”返回。如果需要更多的列,可以在SELECT语句中添加它们并将它们添加到GROUP BY子句中。
mysql中将列动态转换为行,mysql 行转列 MySQL数据库动态行转列
MySQL中将列动态转换为行,可以使用`GROUP_CONCAT`函数和`CASE WHEN`语句,具体操作如下:
假设有一张表`demo_table`,包含以下数据:
```
+----+-------+-------+-------+
| id | name | score | grade |
+----+-------+-------+-------+
| 1 | Alice | 90 | A |
| 2 | Bob | 80 | B |
| 3 | Cindy | 70 | C |
+----+-------+-------+-------+
```
现在需要将`score`列转换为行,即将每个人的成绩按照科目进行展示,可以使用以下SQL语句:
```sql
SELECT name,
MAX(CASE WHEN grade = 'A' THEN score END) AS 'A',
MAX(CASE WHEN grade = 'B' THEN score END) AS 'B',
MAX(CASE WHEN grade = 'C' THEN score END) AS 'C'
FROM demo_table
GROUP BY name;
```
执行以上SQL语句后,可以得到以下结果:
```
+-------+----+----+----+
| name | A | B | C |
+-------+----+----+----+
| Alice | 90 | | |
| Bob | | 80 | |
| Cindy | | | 70 |
+-------+----+----+----+
```
其中,`CASE WHEN`语句将每个成绩按照科目进行分组,`MAX`函数将每个分组中最大的成绩取出来,最终得到了每个人的成绩表格。
阅读全文