SUM0

简介

SUM0
SUM0
函数对一组数值求和,与
SUM
SUM
的唯一区别是:当组内所有值均为
NULL
NULL
时,
SUM0
SUM0
返回
0
0
而不是
NULL
NULL
。适合在外层查询中直接做数值计算、不想额外处理
NULL
NULL
的场景。

语法

SUM0([DISTINCT] expr) [FILTER (WHERE condition)]

参数

  • expr
    expr
    :数值类型的表达式。

返回结果

  • 返回值类型与
    expr
    expr
    一致(整数或浮点数)。
  • 计算时忽略
    NULL
    NULL
    值,将其视为
    0
    0
    参与求和。
  • 当组内所有值均为
    NULL
    NULL
    (或组为空)时,返回
    0
    0
    ,而非
    NULL
    NULL

示例

  1. 基本用法(含
    NULL
    NULL
    值,
    NULL
    NULL
    计为 0):

SELECT SUM0(v) FROM (VALUES (1),(2),(NULL)) t(v); +---------+ | sum0(v) | +---------+ | 3 | +---------+

  1. SUM
    SUM
    SUM0
    SUM0
    在全
    NULL
    NULL
    组时的差异:

SELECT SUM(v), SUM0(v) FROM (VALUES (NULL),(NULL)) t(v); +--------+---------+ | sum(v) | sum0(v) | +--------+---------+ | NULL | 0 | +--------+---------+

  1. 结合 GROUP BY 使用,某分组全为
    NULL
    NULL
    SUM0
    SUM0
    返回 0:

SELECT category, SUM(amount) AS total_sum, SUM0(amount) AS total_sum0 FROM (VALUES ('A', 10), ('A', NULL), ('B', NULL), ('B', NULL) ) t(category, amount) GROUP BY category; +----------+-----------+------------+ | category | total_sum | total_sum0 | +----------+-----------+------------+ | A | 10 | 10 | | B | NULL | 0 | +----------+-----------+------------+

  1. 使用 DISTINCT 对去重后的值求和:

SELECT SUM0(DISTINCT v) FROM (VALUES (2),(2),(3),(NULL)) t(v); +------------------+ | sum0(DISTINCT v) | +------------------+ | 5 | +------------------+

  1. 使用 FILTER 子句条件性求和:

SELECT SUM0(v) FILTER (WHERE v > 1) FROM (VALUES (1),(2),(3),(NULL)) t(v); +------------------------------------+ | sum0(v) FILTER (WHERE (v > 1)) | +------------------------------------+ | 5 | +------------------------------------+

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询