๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ORACLE/SQL

[Oracle] ROW_NUMBER, RANK, DENSE_RANK ํ•จ์ˆ˜ ์ˆœ์œ„ ๋งค๊ธฐ๊ธฐ :: ๋งˆ์ด์ž๋ชฝ

by ๐ŸŒปโ™š 2020. 3. 29.
์‚ฌ์›๋“ค์˜ ๊ธ‰์—ฌ๋ฅผ ๋งŽ์ด ๋ฐ›๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ˆœ์œ„๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

ORACLE SCOTT ๊ณ„์ •์˜ EMPLOYEES ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•ด์„œ ์ถœ๋ ฅํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

์ˆœ์„œ๋ฅผ ๋งค๊ธฐ๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„์„ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ๊ตฌํ• ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 
    EMPNO
    ,ENAME 
    ,SAL
    ,DEPTNO
    ,ROWNUM AS RNK
FROM
  (
    SELECT 
      * 
    FROM 
      EMP 
    ORDER BY SAL DESC
  );

SELECT ์ ˆ์€ ORDER BY ์ด์ „์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— SUBQUERY๋ฅผ ์ด์šฉํ•ด์„œ ์ˆœ์œ„๋ฅผ ๋งค๊ธธ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์ˆœ์œ„์ค‘ ์ผ๋ถ€๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” TOP-N์ฟผ๋ฆฌ๋‚˜ ROW LIMIT CLAUSE๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ์กฐ!

 

[Oracle] ์˜ค๋ผํด ํŽ˜์ด์ง• ์ฟผ๋ฆฌ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ Row Limiting Clause ์‚ฌ์šฉ :: ๋งˆ์ด์ž๋ชฝ

์˜ค๋ผํด ํŽ˜์ด์ง• ์˜ค๋ผํด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŽ˜์ด์ง• ์ฟผ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ• ๊นŒ์š”? ํฌํ„ธ ์‚ฌ์ดํŠธ์—์„œ ๊ฒ€์ƒ‰์„ ํ–ˆ์„ ๋•Œ, ๊ฒŒ์‹œํŒ ํ˜•ํƒœ์˜ ์›น์‚ฌ์ดํŠธ์—์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ๋•Œ, ํ•œ๋ฒˆ์— ๋ชจ๋“  ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์—ฌ ํ™”..

myjamong.tistory.com

 

๊ทธ๋Ÿผ ๋ถ„์„ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”?

1
2
3
4
5
6
7
SELECT
    EMPNO
    ,ENAME
    ,SAL
    ,DEPTNO
    ,ROW_NUMBER() OVER(ORDER BY SAL DESC) AS RNK
FROM EMP;
 

ROW_NUMBERํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ถ„์„ํ•จ์ˆ˜์—๋Š” ์ˆœ์œ„๋ฅผ ๋งค๊ธฐ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ 3๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค. ROW_NUMBER(), RANK(), DENSE_RANK()  ์„ธ๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ๋น„๊ตํ•ด์„œ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค.

 

 

ROW_NUMBER, RANK, DENSE_RANK ๋น„๊ต

์œ„์˜ ์˜ˆ์ œ์—์„œ ROW_NUMBER๋ฅผ ์‚ฌ์šฉํ–ˆ์„๋•Œ, ์ค‘๋ณต์— ๋Œ€ํ•œ ์ˆœ์œ„ ์ฒ˜๋ฆฌ๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ์ˆœ์„œ๋Œ€๋กœ๋งŒ ๋‚˜์—ดํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋™์ผ ๊ฐ’์— ๋Œ€ํ•ด์„œ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”? 3๊ฐ€์ง€ ํ•จ์ˆ˜๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•ด์„œ ๋น„๊ตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

1
2
3
4
5
6
7
8
9
SELECT
    EMPNO
    ,ENAME
    ,SAL
    ,DEPTNO
    ,ROW_NUMBER() OVER(ORDER BY SAL DESC) AS RN_RANK
    ,RANK() OVER(ORDER BY SAL DESC) AS RANK
    ,DENSE_RANK() OVER(ORDER BY SAL DESC) AS D_RANK
FROM EMP;
 

9, 10 ,11๋ฒˆ ํ–‰์„ ํ™•์ธํ•ด๋ณด๋ฉด ๊ฐ๊ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

ROW_NUMBER ํ•จ์ˆ˜

ROW_NUMBER ํ•จ์ˆ˜๋Š” ๋™์ผ ๊ฐ’์— ์ƒ๊ด€์—†์ด ์ˆœ์ฐจ์ ์ธ ๋ฒˆํ˜ธ๋กœ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

 

RANK ํ•จ์ˆ˜

RANK ํ•จ์ˆ˜๋Š” ๋™์ผ๊ฐ’์— ๋Œ€ํ•ด์„œ ๊ฐ™์€ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ๋‹ค์Œ ์ˆœ์œ„๋Š” ๋ˆ„์  ์ˆœ์œ„๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

DENSE_RANK ํ•จ์ˆ˜

 DENSE_RANK ํ•จ์ˆ˜๋Š” ๋™์ผ๊ฐ’์— ๋Œ€ํ•ด์„œ ๊ฐ™์€ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ๋‹ค์Œ ์ˆœ์œ„๋Š” ๋ˆ„์  ์‹œํ‚ค์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ˆœ์ฐจ๋ฅผ ์ง€ํ‚ต๋‹ˆ๋‹ค.

 

 

 

PARTITION ORDER BY

1
2
3
4
5
6
7
SELECT
    EMPNO
    ,ENAME
    ,SAL
    ,DEPTNO
    ,RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) AS RNK
FROM EMP;
 

๋ถ„์„ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ฐ ๊ทธ๋ฃน๋ณ„๋กœ ์ˆœ์œ„๋ฅผ ๋งค๊ธฐ๋Š” ์ž‘์—…์„ ๊ฐ„๋‹จํ•œ ์ฟผ๋ฆฌ๋กœ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

[Oracle] OVER ... PARTITION BY ๋ถ„์„์ ˆ ANALYTIC FUNCTION :: ๋งˆ์ด์ž๋ชฝ

์‚ฌ์› ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋Š”๋ฐ, ์ „์ฒด ๊ธ‰์—ฌ ํ‰๊ท ๊ฐ’๊ณผ ํ•จ๊ป˜ ์ถœ๋ ฅํ•˜์‹œ์˜ค. ORACLE SCOTT ๊ณ„์ • EMP ํ…Œ์ด๋ธ”๋กœ ์ถœ๋ ฅ๋œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ์œ„ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜์‹ค๊ฑด๊ฐ€์š”? 1 2 3 4 5 6 7 8 SELECT DEPTNO ,EMPNO..

myjamong.tistory.com

 

 

RANK ์˜ˆ์ธก WITHIN GROUP

1
2
3
4
SELECT
    RANK(2975) WITHIN GROUP (ORDER BY SAL DESC) AS RNK
    ,DENSE_RANK(2975) WITHIN GROUP (ORDER BY SAL DESC) AS D_RNK
FROM EMP;
 

RANK์™€ DENSE_RANKํ•จ์ˆ˜์— ์ธ์ž๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ํ•ด๋‹น ๊ฐ’์ด ๋ฒ”์œ„์— ์žˆ๋‹ค๋ฉด ๋ช‡๋“ฑ์ธ๊ฐ€?๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋Œ“๊ธ€