📜  在 sql 中创建数据透视表(1)

📅  最后修改于: 2023-12-03 14:51:10.835000             🧑  作者: Mango

在 SQL 中创建数据透视表

数据透视表是一种数据分析工具,它可以将大量数据汇总并以交叉表格的形式展现出来,进而更好地分析、筛选、汇总数据。在 SQL 中,我们可以使用 Pivot 操作来创建数据透视表。

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:用于数据透视表的值。
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 表达式的参数和使用方式,以确保生成的数据透视表符合预期。