我们在做数据库统计时往往会遇到查询列是计算出来的,例如查询两公司销售差额等。最近有一个这样的需求:将计算后的结果为负数的改为0,一般来讲我们会直接使用【case when then else end】这样的操作,但是当你计算的公式很长很长的时候,你肯定不想弄两遍公式吧,一个是sql显得臃肿不美观,另外一个数据库处理速度相对也会影响。

这时推荐Oracle的两个函数:取最大值(Greatest)最小值(Least)

这里举个例子,有表t1、t2都有result字段,先将result为空的转换为0,再t2-t1得出结果,如果为负数取0。
一般我们这么写:

select (case when 
(
  (case when t2.result is null then 0 else t2.result end) - 
  (case when t1.result is null then 0 else t1.result end)
) < 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(
  (case when t2.result is null then 0 else t2.result end) - 
  (case when t1.result is null then 0 else t1.result end)
,0) result from t1, t2

示例是用的取最大值函数,还有least取最小值函数用法是一样的就不写例子了。