X라는 테이블의 A라는 키 값을 기준으로 B, C 컬럼의 최대값을 구하고 싶어 아래와 같이 쿼리를 작성했습니다.
SELECT A, MAX(B), MAX(C)
FROM X
GROUP BY A
실제로 X테이블의 B 컬럼은 1,2,3 등 다양한 값을 가지고 있고 이러한 1,2,3 값에 따라 C 컬럼 또한 1,2, 등 다양한 값을 가지고 있습니다.
(EX B값이 1일 때 C는 2 / B값이 2일 때 C는 1 등)
문제는 위의 쿼리를 실행하면 서로 여러 값을 가지고 있는 B, C 컬럼의 최대값만 추출되어 B = 2, C =2 이런 식으로 추출됩니다.
B를 기준으로 B가 최대일 때의 C값, C를 기준으로 C가 최대일 때의 B값을 모두 추출하는 방법이 있을까요?
WITH x AS ( SELECT 1 a, 1 b, 1 c FROM dual UNION ALL SELECT 1, 1, 2 FROM dual UNION ALL SELECT 1, 2, 1 FROM dual ) SELECT a , MAX(b) b , MAX(c) KEEP(DENSE_RANK LAST ORDER BY b, c) c FROM x GROUP BY a ; WITH x AS ( SELECT 1 a, 1 b, 1 c FROM dual UNION ALL SELECT 1, 1, 2 FROM dual UNION ALL SELECT 1, 2, 1 FROM dual ) SELECT a, b, c FROM (SELECT a, b, c , ROW_NUMBER() OVER(PARTITION BY a ORDER BY b DESC, c DESC) rn FROM x ) WHERE rn = 1 ;