Top-N ๊ธฐ๋ฅ
์์๊ฐ ์ง์ ๋ ๋ฐ์ดํฐ ์งํฉ์์ ๋ฐํ๋๋ ํ ์๋ฅผ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณต
์์ ๋๋ ํ์"N"๊ฐ์ ํ์๋ฅผ ๋ฆฌํดํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ํตํด ํ์ด์ง ํ ๋ ๋งค์ฐ ์ ์ฉ
SELECT select_list FROM ํ
์ด๋ธ๋ช
WHERE where_clause
ORDER order_by_clause
row_limiting_clause;
แOFFSET : ๊ฑด๋๋ธ ํ์๋ฅผ ์ง์
์์๋ฅผ ์ง์ ํ๋ฉด offset์ 0์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, NULL ๋๋ ์กฐํ๋๋ ํ์ ๋ณด๋ค ํฌ๋ฉด 0๊ฐ์ ํ์ ๋ฐํ
์๋ตํ๋ฉด offset๋ 0์ด๋ฉฐ ํ ์ ํ์ด ์ฒซ ๋ฒ์งธ ํ์ผ๋ก ์์
แROW | ROWS : ์๋ฏธ๋ฅผ ๋ช
ํํ๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉ
แFETCH : ๋ฆฌํดํ ํ์ ๋๋ ๋ฐฑ๋ถ์จ์ ์ง์ . ์ด ์ ์ ์๋ตํ๋ฉด offset+1 ๋ถํฐ ๋ชจ๋ ํ์ ๋ฐํ
แFIRST | NEXT : ์๋ฏธ๋ฅผ ๋ช
ํํ๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉํจ
แrowcount | percent PERCENT : rowcount๋ ํ์๋ฅผ ์ง์ ํ๋ฉฐ, PERCENT๋ ๋ฐฑ๋ถ์จ์ ์ง์ ํจ
แROW | ROWS : ์๋ฏธ๋ฅผ ๋ช
ํํ๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉ
แONLY | WITH TIES : ์ง์ ๋ ์์ ํ ๋๋ ๋ฐฑ๋ถ์จ์ ์ ํํ๊ฒ ๋ฆฌํด ํ๋ ค๋ฉด ONLY๋ฅผ ์ง์ ํ๋ฉฐ,
๋ง์ง๋ง ํ fetch์ ๋์ผํ ์ ๋ ฌ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๊ฐ ํ์ ๋ฆฌํด ํ๋ ค๋ฉด WITH TIES๋ฅผ ์ง์ .
WITH TIES๋ฅผ ์ง์ ํ๋ฉด order_by_clause๋ฅผ ์ง์ ํด์ผ ํจ. order_by_clause๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ์ถ๊ฐ ํ์ด ๋ฆฌํด โ
์ฒ์ ๋ ์ฝ๋์์ 3๊ฐ๋ง ์ถ๋ ฅ
SELECT * FROM emp
FETCH FIRST 3 ROWS ONLY;
๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ์ฌ ์ฒ์ ๋ ์ฝ๋๋ถํฐ 3๊ฐ๋ง ์ถ๋ ฅ
SELECT * FROM emp
ORDER BY sal DESC
FETCH FIRST 3 ROWS ONLY;
์ ๋ ฌํ์ฌ ์์ 10%๋ง ๊ฐ์ ธ์ค๊ธฐ
SELECT * FROM emp
ORDER BY sal DESC
FETCH FIRST 10 PERCENT ROWS ONLY;
ํ์ด์ง ์ฒ๋ฆฌ
๊ฒ์ํ์ ํ์ด์ง ์ฒ๋ฆฌ ๋ฑ์ ์ฌ์ฉ๋จ
1) ํ์ด์ง ์ฒ๋ฆฌ 11g ์ค์!!! โญ๏ธโญ๏ธโญ๏ธโญ๏ธโญ๏ธ
SELECT * FROM (
SELECT ROWNUM rnum, tb.* FROM (
SELECT name, sal
FROM emp
ORDER BY sal DESC
) tb WHERE ROWNUM <= 30
) WHERE rnum >=21;
offset์ ์ด์ฉํด์ ํน์ ๋ฐ์ดํฐ ๊ฑด๋๋ฐ๊ณ ๋ฐ์ดํฐ ์ถ๋ ฅ
2) ํ์ด์ง ์ฒ๋ฆฌ 12g โญ๏ธโญ๏ธโญ๏ธโญ๏ธโญ๏ธ
SELECT name, sal
FROM emp
ORDER BY sal DESC
OFFSET 20 ROWS FETCH FIRST 10 ROWS ONLY;
MariaDB/MySQL ํ์ด์ง ์ฒ๋ฆฌ
20๊ฐ๋ฅผ ๊ฑด๋๋ฐ๊ณ 10๊ฐ ๊ฐ์ ธ์ค๊ธฐ
SELECT name, sal
FROM emp
ORDER BY sal DESC
ORDER BY sal DESC
LIMIT 20, 10;