很多时候我们选择求一列的最大值的最小值的或者排序时,往往都会记得用max()minrank等函数

但是当我们需要对一行内固定列进行对最大最小值检索时还是用这些吗?答案是否定的

Oracle内置函数内GREATEST 返回值列表中最大值LEAST 返回值列表中最小值

COALESCE

用法为COALESCE(value1,value2,value3,.....),返回该value组内第一个非空的值,若所有值都为空则返回一个空值,value列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。如:

select coalesce(null,null,2,1,3) from table; → 3

当然单纯数据比较是没意义的,落实到实际的使用通常为

select coalesce(col1,col2) from table t;排查两列是否存在非空的值,这样做的处理有点类似于NVL。

GREATEST/LEAST

GREATEST/LEAST(value1,value2,value3,.....):返回列表内最大/最小值,但值得注意的是如果value内有null值,则会返回null。

value列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。具体事务例子如下:假设trade_type最大值为最终处理结果,最小值为最初处理结果,但是却记录在不同的一个表内。

select c.txn_time as pre_txn_time,
       c.order_id,
       c.shop_id   as pre_shop_id,
       b.txn_time,
       b.order_id,
       b.shop_id   as pre_shop_id,
       b.customer_id,
       GREATEST(c.process_code,e.process_code) as final_trade_type,
       LEAST(c.process_code,e.process_code) as first_trade_type,
       e.value
  from t_order b
  left join t_order_trans d
    on b.order_id = d.order_id
 right join t_order c
    on c.txn_time = b.pre_txn_time
 right join t_order_trans e
    on e.order_id = b.order_id
 where b.order_id in (select xxxx)
最后修改:2022 年 03 月 28 日 05 : 39 PM