📅  最后修改于: 2023-12-03 14:51:10.835000             🧑  作者: Mango
数据透视表是一种数据分析工具,它可以将大量数据汇总并以交叉表格的形式展现出来,进而更好地分析、筛选、汇总数据。在 SQL 中,我们可以使用 Pivot 操作来创建数据透视表。
Pivot 操作分为两个部分,首先是使用聚合函数对数据进行基本计算,其次是使用 Pivot 表达式将聚合数据转换为数据透视表。
语法如下:
SELECT *
FROM (SELECT [* | expression_list]
FROM source_table_name
WHERE join_expr
GROUP BY group_expr) AS alias_name
PIVOT (aggregate_function(columns_to_aggregate)
FOR column_to_pivot
IN (values_in_column_to_pivot)) AS pivot_table_alias;
其中,
*
或 expression_list
:指定查询的列,使用聚合函数进行统计;source_table_name
:需要进行聚合的原始表名;join_expr
:可选,指定连接条件;group_expr
:按照此列进行分组,用于生成数据透视表的行;aggregate_function
:例如 SUM、AVG 等聚合函数;columns_to_aggregate
:需要进行聚合的列;column_to_pivot
:用于生成数据透视表的列;values_in_column_to_pivot
:用于数据透视表的值。假设我们有如下学生成绩表,用于记录学生的成绩信息:
| 学生姓名 | 科目 | 成绩 | | :------: | :--: | :--: | | Lucy | 语文 | 98 | | Lucy | 数学 | 87 | | Lucy | 英语 | 92 | | Jack | 语文 | 76 | | Jack | 数学 | 89 | | Jack | 英语 | 90 | | Emily | 语文 | 83 | | Emily | 数学 | 78 | | Emily | 英语 | 85 |
我们希望使用 Pivot 操作创建一个数据透视表,用于统计每个学生各科的成绩情况。
以下是 Pivot 操作的示例代码:
SELECT *
FROM (SELECT student_name, subject, score
FROM scores
WHERE 1=1) AS source_data
PIVOT (AVG(score)
FOR subject
IN ('语文', '数学', '英语')) AS pivot_table;
运行该代码后,我们将得到以下结果:
| 学生姓名 | 语文_avg | 数学_avg | 英语_avg | | :------: | :------: | :------: | :------: | | Lucy | 98 | 87 | 92 | | Jack | 76 | 89 | 90 | | Emily | 83 | 78 | 85 |
以上示例中,我们首先从原始表中选择了三个列:学生姓名、科目和成绩。然后使用 Pivot 操作聚合数据,每个学生对应“语文_avg”、“数学_avg”、“英语_avg”三个列,分别对应各科的平均成绩。最后,我们得到了一个数据透视表,展示了每个学生各科的成绩情况。
通过 Pivot 操作,我们可以很方便地创建数据透视表,从而更好地分析和展示数据。在实际使用 Pivot 操作时,需要注意 Pivot 表达式的参数和使用方式,以确保生成的数据透视表符合预期。