我们在做数据库统计时往往会遇到查询列是计算出来的,例如查询两公司销售差额等。最近有一个这样的需求:将计算后的结果为负数的改为0,一般来讲我们会直接使用【case when then else end】这样的操作,但是当你计算的公式很长很长的时候,你肯定不想弄两遍公式吧,一个是sql显得臃肿不美观,另外一个数据库处理速度相对也会影响。
这时推荐Oracle的两个函数:取最大值(Greatest)最小值(Least)
这里举个例子,有表t1、t2都有result字段,先将result为空的转换为0,再t2-t1得出结果,如果为负数取0。
一般我们这么写:
select (case when (t2.result - t1.result) < 0 then 0 else ( (case when t2.result is null then 0 else t2.result end) - (case when t1.result is null then 0 else t1.result end) ) end) result from t1, t2
用函数的话就是这样子:
select greatest(t2.result - t1.result, 0) result from t1, t2
示例是用的取最大值函数,还有least取最小值函数用法是一样的就不写例子了。