Null和空值对于avg计算时产生的影响以及处理

本文介绍如何在SQL中处理空字符串和NULL值,以便正确计算平均值。文章提供了两种方法:一种是将空字符串和NULL值包含在计算中,另一种是排除它们。此外,还详细解释了使用IF函数和COUNT函数的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么要关注这一块呢:1.面试中可能会有涉及 2.工作中真的也可能会用,既然有可能我也用过,就拿出来跟大家分享一下,上一篇的博文,数据已准备好就不做数据准备的介绍了。

  step1:select * from a; ---进行数据查询

  step2: select avg(number) from a;   ---求平均值

 分析:从上述结果来看,他是除了4,我们可以在单独验证是空字符串没有算行还是null值没有算呢,通过我们的实验发现是null没有算行。

在实际情况中我们要根据实际需要判断空字符串行以及null值所在的行要不要加入到计算行业中,这个时候我们就要引入我们的count函数根据实际需要灵活计算;

一、第一种空字符串和null值所在的行要加入到计算范围中:

select sum(number)/count(*)  as avg from a;

二、第二种空字符串和null值所在的行不要加到计算范围中:

`IF`(expr1,expr2,expr3)   ----使用if函数,若满足条件1,则返回expr2,不满足条件则返回expr3

问题关键就在于我们的count要把null和空字符全部剔除,首先使用我们的if函数把所有空字符串转化成null,然后使用count(字段)---会自动过滤掉我们的null值所在的行

count(if(number ='',null,number))

select sum(number)/count(if(number ='',null,number)) as avg from a;

 

### Oracle 数据库中空值 (NULL) 的处理方法 #### 使用 `NVL` 函数替代 NULL 为了防止因为空值而导致的计算错误或其他逻辑问题,可以使用 `NVL` 函数来替换可能存在的 NULL 。当遇到第一个参数为 NULL ,`NVL` 将返回第二个参数作为替代。 ```sql SELECT NVL(salary, 0) AS salary_with_default FROM employees; ``` 这行 SQL 查询语句会把所有员工工资中的 NULL 替换成 0 显示出来[^1]。 #### 利用 `COALESCE` 函数提供多重备选 除了 `NVL` ,还可以采用更灵活的方式——即通过调用 `COALESCE` 来实现相同目的。它允许指定多个备用表达式,在前一个表达式的不是 NULL 的情况下依次尝试后面的选项直到找到非 NULL 结果为止。 ```sql SELECT COALESCE(commission_pct, bonus, base_salary, 0) as total_compensation FROM employees; ``` 这段代码展示了如何利用 `COALESCE` 给定三个不同的补偿项并最终给出总薪酬数额;如果前三者均为 NULL,则默认设为 0[^2]. #### 设置列属性不允许存储 NULL 为了避免不必要的麻烦,可以在创建表结构之初就明确规定某些特定字段不得存入任何形式下的 null 。例如: ```sql CREATE TABLE new_employees ( id NUMBER PRIMARY KEY, name VARCHAR2(50) NOT NULL, hire_date DATE DEFAULT SYSDATE NOT NULL ); ``` 这里定义了一个名为 `new_employees` 表,并规定其内的 `name` `hire_date` 字段均不可为空[^3]. #### 控制连接查询产生NULL 对于涉及联接操作(如 LEFT JOIN/RIGHT JOIN/FULL OUTER JOIN)所造成的额外空白区域,可以通过调整 ON 子句条件或者 WHERE 过滤器来进行控制。比如只保留那些确实存在匹配关系的数据记录: ```sql SELECT e.employee_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON e.department_id = d.department_id WHERE e.employee_id IS NOT NULL AND d.department_id IS NOT NULL; ``` 上述例子说明了怎样过滤掉由于全外部联合所带来的多余 null 记录. #### 对聚合函数的影响及对策 得注意的是,像 COUNT(), SUM() 等这样的聚集功能通常不会考虑输入集里的 null 成员。因此有需要特别注意这一点以确保统计结果准确无误。例如求平均数的候应该这样写: ```sql SELECT AVG(NVL(salary, 0)) average_salary FROM employees; ``` 这样做能够保证即使有部分人的薪资信息缺失也不会影响到整体平均水平的计算.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值