Oracle查询预防解决分母为0的方法

本文通过两种函数方法解决介绍了sql查询中分母为0的预防处理方法,主要采用decode函数或case when。在oracle数据查询中,常计算百分比,百分比分母又常通过子查询获得,常遇到业务数据暂时没有的时候,此时分母为0,因此sql语句在涉及到除法运算时应当提前预防和处理分母为0的情况。

一、decode函数

1、DECODE(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

该函数的含义如下:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)

ELSE
RETURN(缺省值)
END IF

2、NVL函数

NVL(expr1,expr2)

含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。

3、示例

如下想要实现计算 percent = done_num/all_num,避免all_num没有数据(select count()时得来),并区分实际计算结果为0 的情况,当没有数据时返回NULL。

借助NVL函数和DECODE函数。

sql 复制代码
select 100*nvl(TABLE2.done_num,0)/decode(TABLE1.all_num,0,null,TABLE1.all_num) as percent from TABLE1,TABLE2

二、case when 语句

1、case when函数

CASE WHEN '表达式1' THEN '结果1'

WHEN '表达式2' THEN '结果2'

WHEN '表达式3' THEN '结果3'

ELSE '其他结果'

END

2、示例

如下想要实现计算 percent = done_num/all_num,避免all_num没有数据(select count()时得来),并区分实际计算结果为0 的情况,当没有数据时返回NULL。

sql 复制代码
select 100*IFNULL(TABLE2.done_num,0)/(CASE TABLE1.all_num
WHEN 0 THEN
NULL
ELSE
TABLE1.all_num
END
) as percent from TABLE1,TABLE2
相关推荐
吴声子夜歌1 分钟前
SQL经典实例——元数据查询
数据库·sql
睡不醒男孩03082333 分钟前
生产环境故障销账:PostgreSQL 突发连接数暴涨与死锁,如何利用 CLup 秒级定位与解锁?
运维·数据库
2601_9620549535 分钟前
终端与IDE形态的vibe coding实测:两款AI编程工具迭代能力对比
数据库·ide·ai编程
万岳科技1 小时前
教育培训系统开发流程详解:平台建设关键环节解析
数据库·后端·学习
Nturmoils1 小时前
线上修一批脏数据,先别急着全量重来
数据库·后端
吴声子夜歌1 小时前
SQL经典实例——处理字符串
数据库·sql
睡不醒男孩0308231 小时前
PostgreSQL 数据库运维转型:从传统模式到 CLup 平台的 25 个核心 FAQ
运维·数据库·postgresql
凡人叶枫2 小时前
Effective C++ 条款40:明智而审慎地使用多重继承
java·数据库·c++·嵌入式开发·effective c++
至此流年莫相忘2 小时前
Spring 依赖注入三剑客:@Autowired、@Resource 与 @RequiredArgsConstructor 深度对比与实战指南
java·数据库·spring
Rain5092 小时前
2.2 数据基础:数据库集成与 ORM(TypeORM / Prisma)
数据库·人工智能·ai·数据分析·node.js·自动化·ai编程