์ฟผ๋ฆฌ๋ฅผ ํตํด DB์์ ์กฐํ๋ฅผ ํ ๋ ๋ด๊ฐ ์ํ๋ ์์๋๋ก ๊ตฌ์ฒด์ ์ผ๋ก ๋งํ์๋ฉด ํน์ ํ๋์ ์์๋๋ก ์ ๋ ฌ์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ORDER BY ์ ์ FIELD๋ผ๋ ํค์๋๋ฅผ ํตํด์ ๊ตฌํํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
ORDER BY FIELD
์๋ฅผ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ์ ํ ์ด๋ธ TB_EXAMPLE์ด ์๋ค๊ณ ๊ฐ์ ์ ํด๋ด ๋๋ค.
TB_EXAMPLE
SEQ,
NAME,
STATUS
๋ฐ์ดํฐ๋ ์๋์ ๊ฐ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
(1, 'TEST1', 'ST01')
(2, 'TEST2', 'ST01')
(3, 'TEST3', 'ST01')
(4, 'TEST4', 'ST03')
(5, 'TEST5', 'ST02')
(6, 'TEST6', 'ST01')
์ด๋ฐ ์ํฉ์์ ๋ณดํต STATUS๋ผ๋ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ ๊ฒฝ์ฐ์ ์๋์ ๊ฐ์ด ์ฟผ๋ฆฌ๋ฅผ ๋์ง ๊ฒ์ ๋๋ค.
SELECT
SEQ,
NAME,
STATUS
FROM TB_EXAMPLE
ORDER BY STATUS DESC
(4, 'TEST4', 'ST03')
(5, 'TEST5', 'ST02')
(1, 'TEST1', 'ST01')
(2, 'TEST2', 'ST01')
(3, 'TEST3', 'ST01')
(6, 'TEST6', 'ST01')
๊ทธ๋ฐ๋ฐ ๋ง์ฝ์ ST03๋ณด๋ค ST02๊ฐ ๋จผ์ ๋์์ผ๋ฉด ์ข๊ฒ ๋ค๋ฉด ์ด๋ป๊ฒ ํ ์ ์์๊น์? ๋ฐ๋ก FIELDํค์๋๋ฅผ ํตํด์ ๊ฐ๋ฅํฉ๋๋ค.
SELECT
SEQ,
NAME,
STATUS
FROM TB_EXAMPLE
ORDER BY
FIELD(STATUS, 'ST03', 'ST02') DESC,
STATUS ASC
FIELD์ ์ฒซ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ ฌํ ์ปฌ๋ผ์ ๋ฃ๊ณ ๊ทธ ๋ค์ ์ ๋ ฌํ ๊ฐ์ ์ญ์์ผ๋ก ๋ฃ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
(5, 'TEST5', 'ST02')
(4, 'TEST4', 'ST03')
(1, 'TEST1', 'ST01')
(2, 'TEST2', 'ST01')
(3, 'TEST3', 'ST01')
(6, 'TEST6', 'ST01')
์๋ฆฌ๋ FIELD ํค์๋๋ ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ ๊ฐ์ ๊ธฐ์ค ์ปฌ๋ผ์ผ๋ก ์ธ์ํ๊ณ ๊ทธ ๋ค์ ์ค๋ ๊ฐ๋ค์ ์ปฌ๋ผ์ ๊ฐ์ผ๋ก ๋น๊ตํ์ฌ ํด๋น ํ๋ผ๋ฏธํฐ ๊ฐ์ด ๋ช๋ฒ์งธ ์ธ์ง index๊ฐ์ ๋ฐํํฉ๋๋ค. ์์ ์ฟผ๋ฆฌ๋ก๋ ST03๋ ์ปฌ๋ผ ๋ฐ๋ก ๋ค์ ์ค๊ธฐ ๋๋ฌธ์ 1์ด ๋ฐํ๋๊ณ ST02๋ ๊ทธ ๋ค์ ์ค๊ธฐ ๋๋ฌธ์ 2๊ฐ ๋ฐํ๋ฉ๋๋ค. ๋๋จธ์ง๋ ๊ฐ์ด ํด๋น๋์ง ์๊ธฐ ๋๋ฌธ์ 0์ด ๋ฐํ๋ฉ๋๋ค. ์ด ๊ฐ๋ค์ ์ญ์ ๋ ฌ(DESC)ํ๊ธฐ ๋๋ฌธ์ ST02๊ฐ ๊ฐ์ฅ ๋จผ์ ๋์ค๊ฒ ๋๊ณ ๊ทธ ๋ค๋ก ST03 ๊ทธ๋ฆฌ๊ณ ST01์ด ๋์ค๊ฒ ๋ฉ๋๋ค.
์ด ์ํ์์ ๋ค์ STATUS ASC ๋ฅผ ์ถ๊ฐํด ์ฃผ์๊ธฐ ๋๋ฌธ์ ๋๋จธ์ง๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ์ด ๋ฉ๋๋ค.
์ฐธ๊ณ