返回
告别枯燥数据!3种行转列大法助你玩转SQL
后端
2024-01-05 04:03:00
SQL行转列:数据转换的妙招
身为数据分析师,你是否曾苦恼于将行数据转换为列数据?别担心,掌握这三种SQL行转列妙招,让你轻松搞定数据转换,助力数据分析!
妙招一:聚合变多列,灵活应用
语法:
SELECT uid,
SUM(IF(course='语文', score, NULL)) AS `语文`,
SUM(IF(course='数学', score, NULL)) AS `数学`
FROM score
GROUP BY uid;
示例:
假设我们有一张成绩表score,包含uid、course、score字段。我们希望将每位学生的成绩按照课程分类,展示为列。
SELECT uid,
SUM(IF(course='语文', score, NULL)) AS `语文`,
SUM(IF(course='数学', score, NULL)) AS `数学`
FROM score
GROUP BY uid;
输出:
+----+------+------+
| uid | 语文 | 数学 |
+----+------+------+
| 1 | 90 | 80 |
| 2 | 70 | 90 |
| 3 | 80 | 70 |
+----+------+------+
妙招二:列转行,巧妙重组
语法:
SELECT uid,
'语文' AS course,
`语文` AS score
FROM score
WHERE `语文` IS NOT NULL
UNION
SELECT uid,
'数学' AS course,
`数学` AS score
FROM score
WHERE `数学` IS NOT NULL;
示例:
我们继续使用成绩表score,这次我们希望将每位学生的语文和数学成绩按列展示。
SELECT uid,
'语文' AS course,
`语文` AS score
FROM score
WHERE `语文` IS NOT NULL
UNION
SELECT uid,
'数学' AS course,
`数学` AS score
FROM score
WHERE `数学` IS NOT NULL;
输出:
+----+--------+------+
| uid | course | score |
+----+--------+------+
| 1 | 语文 | 90 |
| 1 | 数学 | 80 |
| 2 | 语文 | 70 |
| 2 | 数学 | 90 |
| 3 | 语文 | 80 |
| 3 | 数学 | 70 |
+----+--------+------+
妙招三:子查询巧用,数据关联
语法:
SELECT uid,
(SELECT score FROM score WHERE course='语文') AS `语文`,
(SELECT score FROM score WHERE course='数学') AS `数学`
FROM (SELECT DISTINCT uid FROM score) AS t;
示例:
我们再次使用成绩表score,希望通过子查询将每位学生的语文和数学成绩关联起来。
SELECT uid,
(SELECT score FROM score WHERE course='语文') AS `语文`,
(SELECT score FROM score WHERE course='数学') AS `数学`
FROM (SELECT DISTINCT uid FROM score) AS t;
输出:
+----+--------+------+
| uid | 语文 | 数学 |
+----+--------+------+
| 1 | 90 | 80 |
| 2 | 70 | 90 |
| 3 | 80 | 70 |
+----+--------+------+
常见问题解答
1. 何时需要行转列?
- 当需要将数据从行式布局转换为列式布局时,例如在展示多列数据或进行数据分析时。
2. 这三种方法有什么区别?
- 方法一: 聚合数据,适合当列名固定且需要汇总相同类别数据时。
- 方法二: 将列转换为行再进行合并,适合将多行数据转换为一行时。
- 方法三: 使用子查询关联数据,适用于数据需要从其他表中获取时。
3. 如何选择合适的方法?
- 根据数据结构和转换需求选择最简洁、最有效的方法。
4. 是否有其他行转列方法?
- 是的,还有一些其他方法,如使用CASE WHEN、PIVOT或UNPIVOT等。
5. 行转列有什么好处?
- 提高数据易读性,方便数据分析。
- 节省存储空间,优化数据组织。
结论
掌握SQL行转列技巧,让你轻松应对数据转换需求。三种妙招各显神通,根据实际情况灵活运用,让你在数据分析的道路上更加得心应手!