在Apache IoTDB中,当所有值都是NULL时,SUM会返回NULL,而不是0
我正在使用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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。