MySQL 行列转换
MySQL 是一种常见的关系型数据库管理系统,支持多种数据类型和数据操作。MySQL 行列转换是一种常见的数据操作方式,可以将列数据转换为行数据或将行数据转换为列数据。
以下是介绍 MySQL 行列转换的六种方法:
1. GROUP_CONCAT
GROUP_CONCAT 是一种函数,可以将某一列的多个值合并为一个字符串,并且可以通过 GROUP BY 对不同的值进行分组。它可以用于将一列数据转换为一行数据。例如:
```
SELECT GROUP_CONCAT(name SEPARATOR ',') AS names
FROM students;
上面的 SQL 语句将 students 表中的 name 列的所有值合并为一个字符串,并以逗号分隔。结果如下:
|---------------------|
| names |
| Tom, Jerry, Alice |
2. CASE WHEN
CASE WHEN 是一种条件语句,可以根据不同的条件返回不同的结果,可以用于将一行数据转换为多列数据。
有如下表格:
| name | score |
| Tom | 80 |
| Jerry | 90 |
| Alice | 85 |
我们可以使用以下 SQL 语句将 score 列转换为三列 A, B, C:
SELECT name,
CASE WHEN score >= 90 THEN 'A' ELSE '' END AS A,
CASE WHEN score >= 80 AND score < 90 THEN 'B' ELSE '' END AS B,
CASE WHEN score < 80 THEN 'C' ELSE '' END AS C
结果如下:
|----------------------------------|
| name | A | B | C |
| Tom | | B | |
| Jerry | A | | |
| Alice | | B | |
3. UNION ALL
UNION ALL 是一种将多个查询结果合并为一个查询结果的操作符,可以用于将多行数据转换为多列数据。例如:
SELECT 'score' AS type, score FROM students
UNION ALL
SELECT 'grade' AS type, grade FROM students;
上面的 SQL 语句将 students 表中的 score 和 grade 列分别转换为两列 type 和 value,将两个查询结果合并为一个查询结果。结果如下:
|-----------------------|
| type | value |
| score | 80 |
| score | 90 |
| score | 85 |
| grade | A |
| grade | B |
4. INNER JOIN
INNER JOIN 是一种将多个表格按照某一列进行联接的操作,可以用于将多行数据转换为多列数据。例如:
SELECT students.name, scores.subject, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id;
上面的 SQL 语句将 students 表和 scores 表按照 student_id 列进行联接,将两个表格的数据合并为一个查询结果。结果如下:
| name | subject | score |
| Tom | English | 80 |
| Jerry | Math | 90 |
| Alice | English | 85 |
5. PIVOT
PIVOT 是一种将行数据转换为列数据的操作,可以使用多个函数来实现,例如 MAX、MIN、SUM 等。例如:
MAX(CASE WHEN subject = 'English' THEN score ELSE NULL END) AS 'English',
MAX(CASE WHEN subject = 'Math' THEN score ELSE NULL END) AS 'Math'
FROM scores
GROUP BY name;
上面的 SQL 语句将 scores 表格中的数据按照 name 列进行分组,将 subject 列转换为列数据,并将 score 列转换为相应的值。结果如下:
|----------------------|
| name | English | Math |
| Tom | 80 | NULL |
| Jerry | NULL | 90 |
| Alice | 85 | NULL |
6. SUBQUERY
SUBQUERY 是一种将多个查询结果合并为一个查询结果的操作,可以用于将多行数据转换为多列数据。例如:
SELECT name,
(SELECT score FROM scores WHERE student_id = students.id AND subject = 'English') AS 'English',
(SELECT score FROM scores WHERE student_id = students.id AND subject = 'Math') AS 'Math'
上面的 SQL 语句将 scores 表格中的数据按照 student_id 列和 subject 列进行筛选,并将结果合并为一个查询结果。结果如下:
相关词
- 数据库管理系统
- 数据类型
- 数据操作
- 函数
- 条件语句
- 操作符
- 联接
- 分组
- 子查询
网友留言(0)