IT

Oracle : 동일한 행의 서로 다른 열에서 최대값을 선택합니다.

itgroup 2023. 2. 14. 20:11
반응형

Oracle : 동일한 행의 서로 다른 열에서 최대값을 선택합니다.

모든 질문이 제목에 거의 다 들어있다.표의 각 행에 대해 열의 부분 집합의 최대값을 선택합니다.

예를 들어, 이 테이블에서

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

쿼리는 호환되는 oracle 8i여야 합니다.

이 테스트 데이터가 주어지면...

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>

...직접 GREATE() 호출은 원하는 결과를 제공합니다.

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>

주의:greatest()는 인수 중 하나가 null인 경우 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>

사용하다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 Fider: 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 Fidle: http://sqlfiddle.com/ #!4/b1c46/1/0

언급URL : https://stackoverflow.com/questions/2928102/oracle-select-maximum-value-from-different-columns-of-the-same-row

반응형