zoukankan      html  css  js  c++  java
  • [Oracle SQL]Greatest and Least

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

    已知表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
  • 相关阅读:
    jvm的几个概念误区
    JDK动态代理和CGLib动态代理的对比
    mybatis源码解析(连载)
    HashMap源码解析(基于JDK1.8)
    线程池ThreadPoolExecutor——Worker源码解析
    Java线程池原理分析
    装饰器模式在mybatis-cache包中的应用
    rocketMQ手动创建Topic
    JVM误区--动态对象年龄判定
    云上奈飞(三):隐藏在播放按钮下的奥秘(上)
  • 原文地址:https://www.cnblogs.com/fangwenyu/p/1654542.html
Copyright © 2011-2022 走看看