๋ฌธ์
๐ MySQL ๋ก ํ์ด
๐ ๋ฌธ์ ๋งํฌ :
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ ๋ฌธ์ ์ค๋ช :
2022๋
1์์ ๋์ ํ๋งค ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ ๋ณ, ์นดํ
๊ณ ๋ฆฌ ๋ณ ๋งค์ถ์ก(TOTAL_SALES = ํ๋งค๋ * ํ๋งค๊ฐ) ์ ๊ตฌํ์ฌ, ์ ์ ID(AUTHOR_ID), ์ ์๋ช
(AUTHOR_NAME), ์นดํ
๊ณ ๋ฆฌ(CATEGORY), ๋งค์ถ์ก(SALES) ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
๊ฒฐ๊ณผ๋ ์ ์ ID๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก, ์ ์ ID๊ฐ ๊ฐ๋ค๋ฉด ์นดํ
๊ณ ๋ฆฌ๋ฅผ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
๐ ํ ์ด๋ธ :
๋ค์์ ์ด๋ ํ ์์ ์์ ํ๋งค์ค์ธ ๋์๋ค์ ๋์ ์ ๋ณด(BOOK), ์ ์ ์ ๋ณด(AUTHOR) ํ ์ด๋ธ์ ๋๋ค.
BOOK ํ ์ด๋ธ์ ๊ฐ ๋์์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ๋ก ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด์์ต๋๋ค.
BOOK_ID | INTEGER | FALSE | ๋์ ID |
CATEGORY | VARCHAR(N) | FALSE | ์นดํ ๊ณ ๋ฆฌ (๊ฒฝ์ , ์ธ๋ฌธ, ์์ค, ์ํ, ๊ธฐ์ ) |
AUTHOR_ID | INTEGER | FALSE | ์ ์ ID |
PRICE | INTEGER | FALSE | ํ๋งค๊ฐ (์) |
PUBLISHED_DATE | DATE | FALSE | ์ถํ์ผ |
AUTHOR ํ ์ด๋ธ์ ๋์์ ์ ์์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ๋ก ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด์์ต๋๋ค.
AUTHOR_ID | INTEGER | FALSE | ์ ์ ID |
AUTHOR_NAME | VARCHAR(N) | FALSE | ์ ์๋ช |
BOOK_SALES ํ ์ด๋ธ์ ๊ฐ ๋์์ ๋ ์ง ๋ณ ํ๋งค๋ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ๋ก ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด์์ต๋๋ค.
BOOK_ID | INTEGER | FALSE | ๋์ ID |
SALES_DATE | DATE | FALSE | ํ๋งค์ผ |
SALES | INTEGER | FALSE | ํ๋งค๋ |
ํ์ด
์ถ์ธก)
์ผ๋จ BOOK_SALES์์ 2022๋ 1์ ์กฐํ๊ฑด ์๋ง ์ถ๋ ฅํ์ฌ ROW์๋ฅผ ์ค์
๊ทธ ํ๋งค๋ด์ญ์ ๊ฐ๊ฐ BOOK_ID๋ก ๊ทธ๋ฃนํํด ์ฑ ๋ง๋ค์ ํ๋งค๊ณ ๋ฅผ ๋จผ์ ๊ณ์ฐ
๊ทธ๋ฆฌ๊ณ ๋์ ์ฑ ์ ๋ณด์ ์๊ฐ ์ ๋ณด๋ฅผ INNNER JOINํด์ ์ฐ๊ฒฐํ๋ ๋ฐฉ์์ผ๋ก ํ๋ฉด ํจ์จ์ ์ผ ๋ฏ ํ๋ค.
๋, ์ ์ ๋ดค๋ ์์ ํ ์ด๋ธ์ ํ๋ฒ ์ ์ฉํด๋ณด๋ฉด ์ข์์ง๋!
์ฟผ๋ฆฌ)
* 1์ฐจ)
WITH S AS
(
SELECT BOOK_ID, SUM(SALES) AS SALES
FROM BOOK_SALES
WHERE SALES_DATE LIKE '2022-01%'
GROUP BY BOOK_ID
)
SELECT A.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY, SUM(S.SALES * B.PRICE) AS TOTAL_SALES
FROM S
INNER JOIN BOOK AS B ON B.BOOK_ID = S.BOOK_ID
INNER JOIN AUTHOR AS A ON A.AUTHOR_ID = B.AUTHOR_ID
GROUP BY A.AUTHOR_ID, B.CATEGORY
ORDER BY A.AUTHOR_ID ASC, B.CATEGORY DESC
๋ฆฌ๋ทฐ)
๋ฏธ๋ฆฌ ํ ์ด๋ธ์ ์์๋ก ๋ง๋ค์ด ๋ ์ผ๋ก์จ ๊ฐ๋ ์ฑ์ด ๊ต์ฅํ ์ข์์ก๋ค.
๊ทผ๋ฐ ์์ ํ ์ด๋ธ์ด ์ฑ๋ฅ์ ์ผ๋ก๋ ๊ธฐ์กด์ FROM์์ ์ฐ๋ ๊ฒ๊ณผ ์ด๋ป๊ฒ ๋ค๋ฅผ๊น ์ถ์ด ์ฐพ์๋ณด๋
์ด ์์ํ ์ด๋ธ์ temp๋ผ๋ ์์ ํ ์ด๋ธ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ํ๋ฒ๋ง ์ฌ์ฉํ๋ ํ ์ด๋ธ์ผ ๊ฒฝ์ฐ ์คํ๋ ค ์ค๋ฒํค๋ ์์!
์์ํ ์ด๋ธ์ ์ฐ๋ ๊ฒ์ ๋์ผํ SQL์ด ๋ฐ๋ณต๋์ด์ ์ฌ์ฉ๋ ๋ ์ฑ๋ฅ์ ๋์ผ์ ์๋ค.
์ด ์ ์ ๊ธฐ์ตํด์ ์ฌ์ฉํ์!