์๋ํจ์
์๋ํจ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์จ๋ผ์ธ์์ ๋ถ์ ์ฒ๋ฆฌ์ฉ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ํจ์์ ๋๋ค. ๋ค์ฐจ์์์ ๋ฐ์ดํฐ ๋ถ์์ ํ ์ ์๋๋ก ๋์์ค๋คํ์ฌ OLAP(OnLine Analytical Processing)ํจ์๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค.
SELECT ์ปฌ๋ผ, ํจ์๋ช (ํ๋ผ๋ฏธํฐ) OVER ([PARTITION BY ์ปฌ๋ผ])
[ORDER BY ์ปฌ๋ผ]
FROM ํ ์ด๋ธ๋ช
์๋ ํจ์๋ SELECT ๋ค์ ์ฌ์ฉ๋๋ฉฐ ์์์ ๋์จ PARTITION BY๋ ๋ฒ์๋ฅผ ์ง์ ํ๋ ์ฟผ๋ฆฌ๋ก ์ ํํญ๋ชฉ์ ๋๋ค.
์๋ํจ์๋ ์์ํจ์, ํ์์ ํจ์, ๊ทธ๋ฃน๋ด ๋น์จํจ์๊ฐ ์์ต๋๋ค.
์์ํจ์
์์ํจ์๋ ๋ ์ฝ๋ ๊ฐ์ ๊ณ์ฐํ๋ ํจ์์ ๋๋ค.
- RANK : ํน์ ์ปฌ๋ผ์ ๋ํ ์์๋ฅผ ๊ตฌํ๋ ํจ์๋ก ๋์ผ ๋ ์ฝ๋๊ฐ ์กด์ฌํ๋ฉด ๋์ผ ์์๋ฅผ ์ค ๋ค ๋ค์๊ฐ์ด ํ์์๋ก ๋์ด๊ฐ๋๋ค.
๋ง์ฝ 4๋ช ์ค 2๋ฑ์ด 2๋ช ์ด๋ฉด 1๋ฑ , 2๋ฑ, 2๋ฑ, 4๋ฑ ์ด๋ ๊ฒ ์์๊ฐ ๋งค๊ฒจ์ง๋๋ค.
- DENSE_RANK : ํน์ ์ปฌ๋ผ์ ๋ํ ์์๋ฅผ ๊ตฌํ๋ ํจ์๋ก ๋์ผ ๋ ์ฝ๋๊ฐ ์กด์ฌํ๋ฉด ๋์ผ ์์๋ฅผ ์ค ๋ค RANK์๋ ๋ฌ๋ฆฌ ๋ค์ ๊ฐ์ด ํ์์๋ก ๋์ด๊ฐ์ง ์์ต๋๋ค.
๋ง์ฝ 4๋ช ์ค 2๋ฑ์ด 2๋ช ์ด๋ฉด 1๋ฑ , 2๋ฑ, 2๋ฑ, 3๋ฑ ์ด๋ ๊ฒ ์์๊ฐ ๋งค๊ฒจ์ง๋๋ค.
- ROW_NUMBER : ํน์ ์ปฌ๋ผ์ ๋ํ ์์๋ฅผ ๊ตฌํ๋ ํจ์๋ก ๋์ผ ๋ ์ฝ๋๊ฐ ์กด์ฌํด๋ ์ฐ์๊ฐ์ ๋ถ์ฌํฉ๋๋ค.
๋ง์ฝ 4๋ช ์ค 2๋ฑ์ด 2๋ช ์ด๋ฉด 1๋ฑ , 2๋ฑ, 3๋ฑ, 4๋ฑ ์ด๋ ๊ฒ ์์๊ฐ ๋งค๊ฒจ์ง๋๋ค.
์์ ๋ก ์ฌ์ฉํ SW์ฐ๋ด ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด๋ฆ | ์ฐ๋ด |
๊น์์ด | 5000 |
๋ฐ๋น | 6000 |
์ด์จ | 5000 |
ํ๋ | 4000 |
SELECT ์ด๋ฆ, ์ฐ๋ด,
RANK( ) OVER (ORDER BY ์ฐ๋ด DESC) RANK,
DENSE_RANK( ) OVER (ORDER BY ์ฐ๋ด DESC) DENSE_RANK,
ROW_NUMBER( ) OVER (ORDER BY ์ฐ๋ด DESC) ROW_NUMBER,
FROM SW์ฐ๋ด
ORDER BY ์ฐ๋ด DESC;
์ด๋ฆ | ์ฐ๋ด | RANK | DENSE_RANK | ROW_NUMBER |
๋ฐ๋น | 6000 | 1 | 1 | 1 |
๊น์์ด | 5000 | 2 | 2 | 2 |
์ด์จ | 5000 | 2 | 2 | 3 |
ํ๋ | 4000 | 4 | 3 | 4 |
ํ์์ ํจ์
ํ์์ ํจ์๋ ๋ ์ฝ๋ ๋ด์์ ๊ฐ์ฅ ๋จผ์ ๋์ค๊ฑฐ๋ ๊ฐ์ฅ ๋ค์ ๋์ค๋ ๊ฐ ๋๋ ์ดํ์ ๋์ฌ ๊ฐ๊ณผ ์ด์ ์ ๋์จ ๊ฐ ๋ฑ์ ๊ณ์ฐํ๋ ํจ์์ ๋๋ค.
- FIRST_VALUE : ์๋์์ ๊ฐ์ฅ ๋จผ์ ๋์ค๋ ๊ฐ์ ์ฐพ์ต๋๋ค.
- LAST_VALUE : ์๋์์ ๊ฐ์ฅ ๋์ค์ ๋์ค๋ ๊ฐ์ ์ฐพ์ต๋๋ค.
- LAG : ์๋์์ ์ด์ ์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
- LEAD : ์๋์์ ์ดํ์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
์์ ๋ก ์ฌ์ฉํ SW์ฐ๋ด ํ ์ด๋ธ์ ์๊น์ ๊ฐ์ต๋๋ค.
์ด๋ฆ | ์ฐ๋ด |
๊น์์ด | 5000 |
๋ฐ๋น | 6000 |
์ด์จ | 5000 |
ํ๋ | 4000 |
SELECT ์ด๋ฆ, ์ฐ๋ด,
FIRST_VALUE(์ด๋ฆ) OVER (ORDER BY ์ฐ๋ด DESC) FIRST_VALUE,
LAST_VALUE(์ด๋ฆ) OVER (ORDER BY ์ฐ๋ด DESC) LAST_VALUE,
LAG(์ด๋ฆ) OVER (ORDER BY ์ฐ๋ด DESC) LAG,
LEAD(์ด๋ฆ) OVER (ORDER BY ์ฐ๋ด DESC) LEAD,
FROM SW์ฐ๋ด
ORDER BY ์ฐ๋ด DESC;
์ด๋ฆ | ์ฐ๋ด | FIRST_VALUE | LAST_VALUE | LAG | LEAD |
๋ฐ๋น | 6000 | ๋ฐ๋น | ํ๋ | ๊น์์ด | |
๊น์์ด | 5000 | ๋ฐ๋น | ํ๋ | ๋ฐ๋น | ์ด์จ |
์ด์จ | 5000 | ๋ฐ๋น | ํ๋ | ๊น์์ด | ํ๋ |
ํ๋ | 4000 | ๋ฐ๋น | ํ๋ | ํ๋ |
๊ทธ๋ฃน ๋ด ๋น์จ ํจ์
๊ทธ๋ฃน ๋ด ๋น์จ ํจ์๋ ๋ฐฑ๋ถ์จ์ ๋ณด์ฌ์ฃผ๋ ๋ฑ ํต๊ณ๋ฅผ ๋ณด์ฌ์ฃผ๋ ํจ์์ ๋๋ค.
- RATIO_TO_REPORT : ์ฃผ์ด์ง ๊ทธ๋ฃน์ ๋ํ ํฉ์ ๊ธฐ์ค์ผ๋ก ํ์ฌ ํ ๊ฐ์ ์๋์ ์ธ ๋น์จ์ ๋ฐํํ๋ ํจ์์ด๋ฉฐ ์ดํฉ์ 1์ด ๋ฉ๋๋ค. ๊ฐ ํ์ ๊ฒฐ๊ณผ ๊ฐ์ 0์์ 1์ฌ์ด์ ๊ฐ์ด ๋ฉ๋๋ค.
- PERCENT_RANK : ์ฃผ์ด์ง ๊ฒฐ๊ณผ ๊ฐ์์ ๊ฐ์ฅ ๋จผ์ ๋์ค๋ ๊ฐ์ 0, ๊ฐ์ฅ ๋ฆ๊ฒ ๋์ค๋ ๊ฐ์ 1๋กํ์ฌ ํ์ ์์๋ฅผ ๊ตฌํ๋ ํจ์์ ๋๋ค. ์ด ํจ์๋ ๊ฒฐ๊ณผ ๊ฐ์ด 0์์ 1์ฌ์ด๊ฐ ๋์ต๋๋ค.
SW์ฐ๋ด ํ ์ด๋ธ์ ๊ฐ์ง๊ณ ๊ทธ๋ฃน๋ด ๋น์จ ํจ์๋ฅผ ์์๋ด ์๋ค.
์ด๋ฆ | ์ฐ๋ด |
๊น์์ด | 5000 |
๋ฐ๋น | 6000 |
์ด์จ | 5000 |
ํ๋ | 4000 |
SELECT ์ด๋ฆ, ์ฐ๋ด,
RATIO_TO_REPORT( ) OVER (ORDER BY ์ฐ๋ด DESC) RATIO_TO_REPORT,
PERCENT_RANK( ) OVER (ORDER BY ์ฐ๋ด DESC) PERCENT_RANK,
FROM SW์ฐ๋ด
ORDER BY ์ฐ๋ด DESC;
์ด๋ฆ | ์ฐ๋ด | RATIO_TO_REPORT | PERCENT_RANK |
๋ฐ๋น | 6000 | 0.3 | 0 |
๊น์์ด | 5000 | 0.25 | 0.25 |
์ด์จ | 5000 | 0.25 | 0.25 |
ํ๋ | 4000 | 0.2 | 1 |
→ ๋ฐ๋น์ RATIO_TO_REPORT๋ ๋ฐ๋น์ ์ฐ๋ด์ธ 6000์ ์ด ์ฐ๋ด์ธ 20000์ผ๋ก ๋๋ ๊ฐ(6000/20000=0.3)์ด ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ PERCENT_RANK์ ๊ฒฝ์ฐ ํ์์๋ก ๋์ด๊ฐ๋ RANK๋ฅผ ๊ธฐ์ค์ผ๋ก ์์๋ณ ๋ฐฑ๋ถ์๋ฅผ ๊ตฌํ๊ฒ ๋ฉ๋๋ค.
'๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฝ๋์ ํ์ด์ฌ(Python) ๊ธฐ์ด 100์ - 6006๋ฒ ~ 6010๋ฒ (0) | 2021.06.14 |
---|---|
์ฝ๋์ ํ์ด์ฌ(Python) ๊ธฐ์ด 100์ - 6001๋ฒ ~ 6005๋ฒ (0) | 2021.06.14 |
์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ PART 8 ์ ๋ฆฌ - ๊ทธ๋ฃนํจ์ (0) | 2021.05.23 |
์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ PART 8 ์ ๋ฆฌ - ์ง๊ณํจ์ (0) | 2021.05.23 |
์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ PART 8 ์ ๋ฆฌ - ํธ๋ฆฌ๊ฑฐ (0) | 2021.05.06 |