복붙노트

[SQL] 오라클 : 같은 행의 다른 컬럼에서 선택 최대 값

SQL

오라클 : 같은 행의 다른 컬럼에서 선택 최대 값

전체 질문은 제목에 꽤 많이 있습니다. 테이블의 각 행에 대해 나는 컬럼의 서브 세트의 최대 값을 선택하고 싶습니다.

예를 들어,이 테이블에서

name m1 m2 m3 m4
A    1  2  3  4
B    6  3  4  5
C    1  5  2  1

결과는 것

name max
A    4
B    6
C    5

쿼리는 호환 오라클 8i를해야합니다.

해결법

  1. ==============================

    1.이 테스트 데이터를 감안할 때 ...

    이 테스트 데이터를 감안할 때 ...

    SQL> select *
      2  from your_table
      3  /
    
    NAME         M1         M2         M3         M4
    ---- ---------- ---------- ---------- ----------
    A             1          2          3          4
    B             6          3          4          5
    C             1          5          2          1
    
    SQL>
    

    ... 간단한 GREATEST () 호출은 원하는 결과를 줄 것이다 :

    SQL> select name
      2          , greatest(m1, m2, m3, m4) as the greatest_m
      3  from your_table
      4  /
    
    NAME THE_GREATEST_M
    ---- --------------
    A                 4
    B                 6
    C                 5
    
    SQL>
    

    인수가 널인 경우 가장 큰 (가) NULL을 반환합니다. 이 문제는 다음 사용 NVL ()의 경우 결과를 왜곡하지 않습니다 디폴트 값을 제공합니다. 예를 들면, 모든 값이 음수가 될 수 없다면 ....

    SQL> select name
      2          , greatest(nvl(m1,0), nvl(m2,0), nvl(m3,0), nvl(m4,0)) as the greatest_m
      3  from your_table
      4  /
    
    NAME THE_GREATEST_M
    ---- --------------
    A                 4
    B                 6
    C                 5
    
    SQL>
    
  2. ==============================

    2.GREATEST 사용 또한 가능 NULL 년대를 처리

    GREATEST 사용 또한 가능 NULL 년대를 처리

    SELECT name, GREATEST(NVL(m1,0), NVL(m2,0), NVL(m3,0), NVL(m4,0)) AS "Max"
    FROM yourtable
    

    입력:

    name m1 m2 m3 m4
    A    1  2  3  4
    B    6  3  4  5
    C    1  5  2  1
    

    산출:

    NAME Max
    A    4
    B    6
    C    5
    

    SQL 바이올린 : http://sqlfiddle.com/#!4/ae268/7/0

    입력:

    name m1 m2   m3 m4
    A    1  2    3  null
    B    6  null 4  5
    C    1  5    2  1
    

    산출:

    NAME Max
    A    3
    B    6
    C    5
    

    SQL 바이올린 : http://sqlfiddle.com/#!4/b1c46/1/0

  3. from https://stackoverflow.com/questions/2928102/oracle-select-maximum-value-from-different-columns-of-the-same-row by cc-by-sa and MIT license