在Apache IoTDB中,当所有值都是NULL时,SUM会返回NULL,而不是0

编程语言 2026-07-09

我正在使用Apache IoTDB 2.0.8的表模型来计算按产品的总销售额。我发现如果某个产品的所有销售记录都是 NULL,SUM函数会返回 NULL,而不是预期的0。

原始数据:

CREATE TABLE product_sales (product_id STRING TAG, sales_amount INT32 FIELD);
INSERT INTO product_sales (`time`, product_id, sales_amount) VALUES (1, 'p1', 100);
INSERT INTO product_sales (`time`, product_id, sales_amount) VALUES (2, 'p1', `null`);
INSERT INTO product_sales (`time`, product_id, sales_amount) VALUES (3, 'p2', 200);
INSERT INTO product_sales (`time`, product_id, sales_amount) VALUES (4, 'p2', 300);
INSERT INTO product_sales (`time`, product_id, sales_amount) VALUES (5, 'p3', `null`);
INSERT INTO product_sales (`time`, product_id, sales_amount) VALUES (6, 'p3', `null`);

产品p3有两个 NULL 销售记录,而p1有一个 NULL 和一个普通值。

直接使用SUM:

  SELECT product_id, SUM(sales_amount) as total FROM product_sales `GROUP BY` product_id;

结果:

+----------+------+
|product_id|total |
+----------+------+
| p3       | null |
| p2       | 500  |
| p1       | 100  |
+----------+------+

p3的总和是 null,但我希望它是0。p1正确地忽略了 NULL 行。

带有 IFNULL 的失败尝试:

SELECT product_id, SUM(IFNULL(sales_amount, 0)) AS total 
FROM product_sales 
GROUP BY product_id;

错误信息:

Unknown function: IFNULL. IoTDB当前不支持 null-处理函数。

问题:

在不支持 null-处理函数的情况下,如何编写SQL,在包含多字段和大量数据的场景中优雅地将 NULL 转换为0?

解决方案

使用 CASE 表达式:

SELECT product_id, 
    CASE SUM(sales_amount) IS NULL THEN 0 ELSE SUM(sales_amount) END AS total 
FROM product_sales 
GROUP BY product_id;
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章