Oracle中聚合函数对NULL值的处理

Oracle中聚合函数对NULL值的处理

在Oracle数据库中,聚合函数对NULL值的处理方式如下:

主要聚合函数的处理方式

  1. COUNT函数

    • COUNT(*):计算所有行数,包括NULL值
    • COUNT(column_name):只计算该列非NULL值的行数
  2. SUM函数

    • 忽略NULL值,只对非NULL值求和
    • 如果所有值都是NULL,返回NULL
  3. AVG函数

    • 忽略NULL值,只对非NULL值计算平均值
    • 如果所有值都是NULL,返回NULL
  4. MAX/MIN函数

    • 忽略NULL值,返回非NULL值中的最大/最小值
    • 如果所有值都是NULL,返回NULL
  5. 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

注意事项

  1. 使用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值会被分到同一组

  1. DISTINCT与聚合函数一起使用时,会先去除NULL值再计算

了解这些行为对于编写正确的聚合查询非常重要,特别是在处理可能包含NULL值的数据时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值