Oracle中聚合函数对NULL值的处理
在Oracle数据库中,聚合函数对NULL值的处理方式如下:
主要聚合函数的处理方式
-
COUNT函数
COUNT(*):计算所有行数,包括NULL值COUNT(column_name):只计算该列非NULL值的行数
-
SUM函数
- 忽略NULL值,只对非NULL值求和
- 如果所有值都是NULL,返回NULL
-
AVG函数
- 忽略NULL值,只对非NULL值计算平均值
- 如果所有值都是NULL,返回NULL
-
MAX/MIN函数
- 忽略NULL值,返回非NULL值中的最大/最小值
- 如果所有值都是NULL,返回NULL
-
LISTAGG函数
- 默认忽略NULL值
- 可以使用ON NULL子句指定NULL值的处理方式(11g R2及以后版本)
示例说明
-- 示例表
CREATE TABLE test_agg (id NUMBER, value NUMBER);
INSERT INTO test_agg VALUES (1, 10);
INSERT INTO test_agg VALUES (2, NULL);
INSERT INTO test_agg VALUES (3, 20);
INSERT INTO test_agg VALUES (4, NULL);
-- COUNT示例
SELECT COUNT(*) FROM test_agg; -- 返回4(所有行)
SELECT COUNT(value) FROM test_agg; -- 返回2(非NULL值)
-- SUM示例
SELECT SUM(value) FROM test_agg; -- 返回30 (10 + 20)
-- AVG示例
SELECT AVG(value) FROM test_agg; -- 返回15 (30/2),不是30/4
-- MAX/MIN示例
SELECT MAX(value), MIN(value) FROM test_agg; -- 返回20和10
注意事项
- 使用NVL函数可以先将NULL值转换为特定值再进行聚合计算:
SELECT AVG(NVL(value, 0)) FROM test_agg; -- 返回7.5 (30/4)
特别注意avg这个关于null的,下面示例: ```
https://editor.youkuaiyun.com/md/?articleId=150379676
2. GROUP BY分组时,所有NULL值会被分到同一组
- DISTINCT与聚合函数一起使用时,会先去除NULL值再计算
了解这些行为对于编写正确的聚合查询非常重要,特别是在处理可能包含NULL值的数据时。
8782

被折叠的 条评论
为什么被折叠?



