SUM0
简介
SUM0
SUM0
函数对一组数值求和,与
SUM
SUM
的唯一区别是:当组内所有值均为
NULL
NULL
时,
SUM0
SUM0
返回
0
0
而不是
NULL
NULL
。适合在外层查询中直接做数值计算、不想额外处理
NULL
NULL
的场景。
语法
SUM0([DISTINCT] expr) [FILTER (WHERE condition)]
参数
返回结果
- 返回值类型与
expr
expr
一致(整数或浮点数)。
- 计算时忽略
NULL
NULL
值,将其视为 0
0
参与求和。
- 当组内所有值均为
NULL
NULL
(或组为空)时,返回 0
0
,而非 NULL
NULL
。
示例
- 基本用法(含
NULL
NULL
值,NULL
NULL
计为 0):
SELECT SUM0(v) FROM (VALUES (1),(2),(NULL)) t(v);
+---------+
| sum0(v) |
+---------+
| 3 |
+---------+
SUM
SUM
与 SUM0
SUM0
在全 NULL
NULL
组时的差异:
SELECT SUM(v), SUM0(v) FROM (VALUES (NULL),(NULL)) t(v);
+--------+---------+
| sum(v) | sum0(v) |
+--------+---------+
| NULL | 0 |
+--------+---------+
- 结合 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 |
+----------+-----------+------------+
- 使用 DISTINCT 对去重后的值求和:
SELECT SUM0(DISTINCT v) FROM (VALUES (2),(2),(3),(NULL)) t(v);
+------------------+
| sum0(DISTINCT v) |
+------------------+
| 5 |
+------------------+
- 使用 FILTER 子句条件性求和:
SELECT SUM0(v) FILTER (WHERE v > 1) FROM (VALUES (1),(2),(3),(NULL)) t(v);
+------------------------------------+
| sum0(v) FILTER (WHERE (v > 1)) |
+------------------------------------+
| 5 |
+------------------------------------+