Programmers] ์กฐ๊ฑด์ ๋ถํฉํ๋ ์ค๊ณ ๊ฑฐ๋ ์ํ ์กฐํํ๊ธฐ
๐ MySQL ์ผ๋ก ํ์ด
๐ ๋ฌธ์ ๋งํฌ :
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ ๋ฌธ์ ์ค๋ช :
USED_GOODS_BOARD ํ ์ด๋ธ์์ 2022๋ 10์ 5์ผ์ ๋ฑ๋ก๋ ์ค๊ณ ๊ฑฐ๋ ๊ฒ์๋ฌผ์ ๊ฒ์๊ธ ID, ์์ฑ์ ID, ๊ฒ์๊ธ ์ ๋ชฉ, ๊ฐ๊ฒฉ, ๊ฑฐ๋์ํ๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฑฐ๋์ํ๊ฐ SALE ์ด๋ฉด ํ๋งค์ค, RESERVED์ด๋ฉด ์์ฝ์ค, DONE์ด๋ฉด ๊ฑฐ๋์๋ฃ ๋ถ๋ฅํ์ฌ ์ถ๋ ฅํด์ฃผ์๊ณ , ๊ฒฐ๊ณผ๋ ๊ฒ์๊ธ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
๋ค์์ ์ค๊ณ ๊ฑฐ๋ ๊ฒ์ํ ์ ๋ณด๋ฅผ ๋ด์ USED_GOODS_BOARD ํ ์ด๋ธ์ ๋๋ค. USED_GOODS_BOARD ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS์ ๊ฒ์๊ธ ID, ์์ฑ์ ID, ๊ฒ์๊ธ ์ ๋ชฉ, ๊ฒ์๊ธ ๋ด์ฉ, ๊ฐ๊ฒฉ, ์์ฑ์ผ, ๊ฑฐ๋์ํ, ์กฐํ์๋ฅผ ์๋ฏธํฉ๋๋ค.
BOARD_ID | VARCHAR(5) | FALSE |
WRITER_ID | VARCHAR(50) | FALSE |
TITLE | VARCHAR(100) | FALSE |
CONTENTS | VARCHAR(1000) | FALSE |
PRICE | NUMBER | FALSE |
CREATED_DATE | DATE | FALSE |
STATUS | VARCHAR(10) | FALSE |
VIEWS | NUMBER | FALSE |
์ถ์ธก)
SQL์์์ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐ ์ค์ ์ธ ๋ฌธ์ ์ธ๋ฏํ๋ค.
์ํ๊ฐ 3๊ฐ์ง ์ด๋ฏ๋ก CASE WHEN ์ผ์ด์ค๋ก!
์ฟผ๋ฆฌ)
* 1์ฐจ)
SELECT
BOARD_ID,
WRITER_ID,
TITLE, PRICE,
CASE
WHEN STATUS = 'SALE' THEN 'ํ๋งค์ค'
WHEN STATUS = 'RESERVED' THEN '์์ฝ์ค'
ELSE '๊ฑฐ๋์๋ฃ'
END AS STATUS
FROM USED_GOODS_BOARD
WHERE CREATED_DATE LIKE '2022-10-05%'
ORDER BY BOARD_ID DESC
๋ฆฌ๋ทฐ)
SQL์์ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ ๋๋
1. IF(์กฐ๊ฑด๋ฌธ, ์ฐธ์ผ๋ ๊ฐ, ๊ฑฐ์ง์ผ๋ ๊ฐ)
2. IFNULL(nullํ๋จ ๊ฐ, null์ด๋ฉด ์ถ๋ ฅ๋ ๊ฐ)
3. CASE WHEN ์กฐ๊ฑด๋ฌธ THEN ์ฐธ์ผ๋ ๊ฐ ELSE ๊ฑฐ์ง์ผ๋ ๊ฐ END
๋ฑ์ ํจ์๋ ํค์๋๊ฐ ์๋ค.
ํนํ 3๋ฒ์์ when์ด๋ then์ ์ฌ๋ฌ๋ฒ ์ฌ์ฉํ ์ ์๊ณ else๋ ๋ชจ๋ ์กฐ๊ฑด์ด ์๋์ ์ถ๋ ฅ๋๋ ๊ฐ์ ์ฐ๋ ๊ฑฐ๋ผ java์ switch์ ๊ฐ๊น๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ์กฐ๊ฑด๋ฌธ๋ค์ ์ค์ฒฉ์ด ๊ฐ๋ฅํ๋ค.