跳至主要内容

SQL SUM() 函数详解

探索 SQL SUM() 函数在数据聚合中的强大能力。学习如何高效实现滚动求和、累积求和以及多列求和。
· 8分钟 阅读

使用 AI 探索

SQL 的 SUM() 函数是一种实用的聚合函数,用于计算数值列的总和。SUM() 函数在数据分析中非常重要,因为它能够汇总特定数值列的关键指标。由于用法直观,SUM() 函数有助于数据分析师从海量数据集中提炼出有意义的洞见。此外,这个通用的函数在多种数据库中均受支持,包括 SQL Server、PostgreSQL、MySQL 和 Oracle。

如果您是希望提升分析技能的新手或资深数据分析师,强烈推荐学习 DataCamp 的SQL 入门和SQL 进阶课程,提升您的数据分析能力。在学习过程中,SQL 基础速查表也将是很好的参考资料。

如何在 SQL 中使用 SUM() 函数

SQL 的 SUM() 函数用于对数据集中某一列的值进行求和。考虑表 orders,其结构如下。

使用 SUM() 函数汇总列总计的示例表。

使用 SUM() 函数汇总列总计的示例表。图片来源:作者。

下面的查询会返回 quantity 列的总数量,并将其命名为 total_quantity,以及由 quantity 与 price 的乘积求和得到的收入,并将其命名为 total_revenue。

请注意,在 total_revenue 的场景中,SUM() 函数与一个表达式配合使用,在求和之前对列进行了额外计算。另外请注意,SUM() 函数在计算总和时会忽略 NULL 值。

-- Select the total quantity and the total revenue-- Calculate the total quantity of all orders and alias 'total_quantity'.-- Calculate the total revenue and assigns it an alias 'total_revenue'.SELECT     SUM(quantity) AS total_quantity,    SUM(quantity * price) AS total_revenueFROM     orders;

使用别名和表达式的 SUM() 函数示例输出表。图片来源:作者。

SQL 中 SUM() 函数的使用场景

SQL 中的 SUM() 函数也可用于执行更高级的计算。下面来看几个示例。

在 SQL 中计算累计和

累计和指的是某个数值列的运行总计。计算累计和很重要,因为它有助于在不同时间段跟踪收入或销售等关键指标的总量。下面的查询展示了如何使用 SUM() 函数计算 quantity 列的累计总计。

-- Calculate cumulative sums of the 'quantity' column for each order_dateSELECT     order_date,     quantity,    -- Calculate the cumulative sum of 'quantity' ordered by 'order_date'    SUM(quantity) OVER (ORDER BY order_date) AS cumulative_quantityFROM     orders;

使用 SQL SUM() 函数计算累计和的示例输出表。

使用 SQL SUM() 函数计算累计和的示例输出表。图片来源:作者。

我建议学习 DataCamp 的SQL 中的数据操作课程,该课详细讲解了用于聚合的窗口函数,包括计算运行总计等技巧。SQL 窗口函数速查表也是快速查阅不同窗口函数及其用法的合适指南。

在 SQL 中对多列求和

SUM() 函数还可用于计算多列的总计。这种方法将多列的数据聚合到一起。请看下面新的 orders 表,包含 opening_quantity 和 received_quantity 两列。

使用 SQL SUM() 函数对多列求和的示例表。

使用 SQL SUM() 函数对多列求和的示例表。图片来源:作者。

下面的示例展示了如何使用 SUM() 函数计算 opening_quantity 与 received_quantity 两列的合计。在这里,使用 + 运算符对两个数值进行算术加法。

-- Calculate the total quantity of opening_quantity and received_quantity columns-- Sum the total values in one columnSELECT     SUM(opening_quantity + received_quantity) AS total_quantityFROM     orders;

使用 SQL SUM() 函数对多列求和的示例输出表。使用 SQL SUM() 函数对多列求和的示例输出表。图片来源:作者。

 

在 SQL 中计算滚动求和

滚动求和允许基于指定数量的前置行来计算总计。SQL 中的 SUM() 函数可用于计算诸如 7 天总销售额等重要指标的滚动求和。下面的查询给出了一个示例,展示如何使用 SUM() 函数按照 order_date 排序,对最近 3 行的 quantity 进行滚动求和。

-- Calculate rolling sums of the 'quantity' column for the past 3 orders for each order_dateSELECT     order_date,     quantity,    -- Calculate the rolling sum of 'quantity' over the last 3 rows ordered by 'order_date'    SUM(quantity) OVER (        ORDER BY order_date         ROWS BETWEEN 2 PRECEDING AND CURRENT ROW    ) AS rolling_quantityFROM     orders;

使用 SUM() 函数在 SQL 中计算滚动求和的示例表格输出。

使用 SUM() 函数在 SQL 中计算滚动求和的示例表格输出。作者供图。

在 SQL 中对 DISTINCT 值求和

您可以使用 DISTINCT 关键字对某一列的值求和,只计算唯一值的总计。下面的示例展示了如何用 DISTINCT 关键字对 quantity 和 price 两列中的唯一值求和。

-- Sum the distinct values of the quantity and price columnsSELECT     SUM(DISTINCT quantity) AS total_distinct_quantity,	SUM(DISTINCT price) AS total_distinct_priceFROM     orders;

SUM 与其他 SQL 聚合函数

如我们所见,SQL 的 SUM() 函数功能强大,且比看起来更灵活。不过,它只是众多SQL 聚合函数之一。下表汇总了最常见的 SQL 聚合函数、其描述及示例:

函数描述示例
SUM()计算数值列的总和。总数量与总收入。
AVG()计算数值列的平均值。产品的平均价格。
MIN()返回列中的最小值。订单的最小数量。
MAX()返回列中的最大值。产品的最高价格。
COUNT()返回满足指定条件的行数。订单总数。

结语

学习 SQL 中的 SUM() 函数,有助于理解其在数据分析中的多种用法。主流数据库都支持 SUM() 函数,且在不同子句和窗口函数的配合上实现相近。我建议您结合不同数据集多加练习 SUM() 的用法,以提升您的 SQL 技能。

如果您想提升面向商业分析的 SQL 技能,建议查看 DataCamp 的 SQL Fundamentals 技能路径,了解按需掌握的能力。同样,欢迎查看我们的 Associate Data Analyst in SQL 职业路径,帮助您学习并掌握推进职业发展的必备 SQL 技能。最后,我强烈推荐获取 DataCamp 的 SQL Associate Certification,以展示您对 SQL 技能的掌握,并助您在众多数据分析师中脱颖而出。

Allan Ouko

作者

Allan Ouko

数据科学技术写作者,具备数据分析、商业智能和数据科学的一线实践经验。我撰写以行业为导向的实用内容,涵盖 SQL、Python、Power BI、Databricks 和数据工程,并以真实的分析工作为基础。我的写作兼顾技术深度与业务影响,帮助专业人士将数据转化为自信的决策。

常见问题解答

什么是 SQL 的 SUM() 函数?

SUM() 函数用于计算表/数据集中某个数值列的总值。

SUM() 与 COUNT() 函数有什么区别?

SUM() 函数计算某一列的总和;而 COUNT() 函数根据条件返回行的总数。

SUM() 函数如何处理 NULL 值?

在计算总和时,SUM() 函数会忽略列中的 NULL 值。

可以将 DISTINCT 关键字与 SUM() 函数一起使用吗?

可以。与 SUM() 函数配合使用 DISTINCT 关键字,用于计算某列中唯一值的总和。

如何将 SUM() 函数与窗口函数结合使用?

SUM() 函数可作为窗口函数,与 OVER 子句一起使用,以在数据分区上计算累积和等结果。

SQL 中还有哪些与 SUM() 类似的函数?

SQL 中与 SUM() 类似的其他聚合函数包括用于求平均的 AVG()、用于计数行数的 COUNT()、用于求最小值的 MIN()、用于求最大值的 MAX()、用于唯一计数的 COUNT(DISTINCT)、用于字符串拼接的 GROUP_CONCAT(),以及用于统计计算的 STDDEV() 或 VARIANCE()。这些函数有助于高效汇总与分析数据。

主题