[Oracle]行内聚合大小函数 Greatest and Least

在网上看到有人问如下问题,

来自 http://www.cnblogs.com/fangwenyu/archive/2010/01/23/1654542.html 

已知表TB的数据如下 

 

SQL >   select   *   from  tb;

        ID    CHINESE       MATH    ENGLISH
-- -------- ---------- ---------- ----------
       1001           89           98           87
      
1002           81           87           79

 

 

现在要得到如下的结果,该怎么来解决,


        ID    CHINESE       MATH    ENGLISH        
MAX          MIN
-- -------- ---------- ---------- ---------- ---------- ----------
       1001           89           98           87           98           87
      
1002           81           87           79           87           79

 

 

 

想了半天也没想到啥好办法,首先自然而然想到用MAX和MIN函数,但是显然这两个是聚集函数,是要作用在同一个column的一个Group上面的,而现在要得到的MAX和MIN的值却是作用于每一行上面的,如果要借助于MAX()和 MIN()的话,还需要对原表的数据结构进行下处理(先进行转列操作unpivot),但是显然不是很好。 

看到有个网友回帖用greatest 和 least函数来做,真是简洁漂亮,也为自己的孤陋寡闻而狂汗呀-_-!!!

 

解决方式如下,

 

复制代码

SQL
>   SELECT  id, chinese, math, english,
  
2          greatest(chinese, math, english)  max ,
  
3          least(chinese, math, english)  min
  
4    FROM    tb;

        ID    CHINESE       MATH    ENGLISH        
MAX          MIN
-- -------- ---------- ---------- ---------- ---------- ----------
       1001           89           98           87           98           87
      
1002           81           87           79           87           79
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值