먼저 테스트용 데이터를 만들어보겠습니다.
SELECT 1 A, 'AAB' B, 2224 C FROM DUAL UNION ALL SELECT 1 A, 'AAB' B, 2224 C FROM DUAL UNION ALL SELECT 1 A, 'AAC' B, 2224 C FROM DUAL UNION ALL SELECT 1 A, 'AAD' B, 2224 C FROM DUAL UNION ALL SELECT 1 A, 'AAA' B, 2222 C FROM DUAL UNION ALL SELECT 2 A, 'CCC' B, 2311 C FROM DUAL UNION ALL SELECT 2 A, 'ACC' B, 2355 C FROM DUAL UNION ALL SELECT 3 A, 'DDD' B, 3333 C FROM DUAL
|
A B C
----------------------
1 AAB 2224 1 AAB 2224 1 AAC 2224 1 AAD 2224 1 AAA 2222 2 CCC 2311 2 ACC 2355 3 DDD 3333
|
이 데이터를 A컬럼으로 GROUP BY 할겁니다. 근데 B컬럼의 MAX값을 구하려고 합니다. 그러면 일반적인 거죠?
SELECT A, MAX(B)
FROM ....
GROUP BY A
근데 MAX(B)를 구할때 다른 조건이 붙는 겁니다.
예를 들자면
C컬럼의 가장큰값중에서.. 라는 조건이 붙었습니다. 정리하자면
A컬럼으로 GROUP BY를 하는데 C컬럼의 가장 큰 값중에서 B컬럼의 MAX를 구하는 겁니다.
이것이 바로 MAX() KEEP() 입니다.
MAX(B) 를 구하는 거긴 한데 그전에 KEEP() 조건이 있습니다. C컬럼의 큰값중에서 B의 MAX
이렇게 씁니다.
MAX(B) KEEP(DENSE_RANK FIRST ORDER BY C DESC)
MAX(B)를 구하는데 C의 DESC 가장 큰값을 구해라
첫번째로 C값이 가장 큰값을 구하고
두번째로 B의 MAX값을 구합니다.
결과를 보면 이해가 빠르실겁니다.
SELECT A, MAX(C), MAX(B),
MAX(B) KEEP(DENSE_RANK FIRST ORDER BY C DESC),
MIN(B) KEEP(DENSE_RANK FIRST ORDER BY C DESC) FROM ( SELECT 1 A, 'AAB' B, 2224 C FROM DUAL UNION ALL SELECT 1 A, 'AAB' B, 2224 C FROM DUAL UNION ALL SELECT 1 A, 'AAC' B, 2224 C FROM DUAL UNION ALL SELECT 1 A, 'AAD' B, 2224 C FROM DUAL UNION ALL SELECT 1 A, 'AAA' B, 2222 C FROM DUAL UNION ALL SELECT 2 A, 'CCC' B, 2311 C FROM DUAL UNION ALL SELECT 2 A, 'ACC' B, 2355 C FROM DUAL UNION ALL SELECT 3 A, 'DDD' B, 3333 C FROM DUAL ) GROUP BY A
|
A MAX(C) MAX(B) MAX(B)KEEP(DENSE_RANKFIRSTORDERBYCDESC) MIN(B)KEEP(DENSE_RANKFIRSTORDERBYCDESC)
------------------------------------------------------------------------------------------------------------------------
1 2224 AAD AAD AAB 2 2355 CCC ACC ACC 3 3333 DDD DDD DDD
|
내용이 유용하셨다면 댓글을 남겨주세요~
잘 보고 갑니다~
잘 지내고 계시죠?
으앗 >, < 촌장님. 잘 지내시죠? 밥이나 함 묵어요~