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
;