1) ๋ฌธ์ ์ค๋ช
๋ค์์ ์ด๋ ํ ์์ ์์ ํ๋งค์ค์ธ ๋์๋ค์ ๋์ ์ ๋ณด(BOOK), ์ ์ ์ ๋ณด(AUTHOR) ํ
์ด๋ธ์
๋๋ค.
BOOK ํ
์ด๋ธ์ ๊ฐ ๋์์ ์ ๋ณด๋ฅผ ๋ด์ ํ
์ด๋ธ๋ก ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด์์ต๋๋ค.
Column name
Type
Nullable
Description
BOOK_ID
INTEGER
FALSE
๋์ ID
CATEGORY
VARCHAR(N)
FALSE
์นดํ
๊ณ ๋ฆฌ (๊ฒฝ์ , ์ธ๋ฌธ, ์์ค, ์ํ, ๊ธฐ์ )
AUTHOR_ID
INTEGER
FALSE
์ ์ ID
PRICE
INTEGER
FALSE
ํ๋งค๊ฐ (์)
PUBLISHED_DATE
DATE
FALSE
์ถํ์ผ
AUTHOR ํ
์ด๋ธ์ ๋์์ ์ ์์ ์ ๋ณด๋ฅผ ๋ด์ ํ
์ด๋ธ๋ก ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด์์ต๋๋ค.
Column name
Type
Nullable
Description
AUTHOR_ID
INTEGER
FALSE
์ ์ ID
AUTHOR_NAME
VARCHAR(N)
FALSE
์ ์๋ช
BOOK_SALES ํ
์ด๋ธ์ ๊ฐ ๋์์ ๋ ์ง ๋ณ ํ๋งค๋ ์ ๋ณด๋ฅผ ๋ด์ ํ
์ด๋ธ๋ก ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด์์ต๋๋ค.
Column name
Type
Nullable
Description
BOOK_ID
INTEGER
FALSE
๋์ ID
SALES_DATE
DATE
FALSE
ํ๋งค์ผ
SALES
INTEGER
FALSE
ํ๋งค๋
2) ๋ฌธ์
2022๋
1์์ ๋์ ํ๋งค ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ ๋ณ, ์นดํ
๊ณ ๋ฆฌ ๋ณ ๋งค์ถ์ก(TOTAL_SALES = ํ๋งค๋ * ํ๋งค๊ฐ) ์ ๊ตฌํ์ฌ, ์ ์ ID(AUTHOR_ID), ์ ์๋ช
(AUTHOR_NAME), ์นดํ
๊ณ ๋ฆฌ(CATEGORY), ๋งค์ถ์ก(SALES) ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
๊ฒฐ๊ณผ๋ ์ ์ ID๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก, ์ ์ ID๊ฐ ๊ฐ๋ค๋ฉด ์นดํ
๊ณ ๋ฆฌ๋ฅผ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
3) ์์
์๋ฅผ ๋ค์ด BOOK ํ
์ด๋ธ๊ณผ AUTHOR ํ
์ด๋ธ, BOOK_SALES ํ
์ด๋ธ์ด ๋ค์๊ณผ ๊ฐ๋ค๋ฉด
BOOK_ID
CATEGORY
AUTHOR_ID
PRICE
PUBLISHED_DATE
1
์ธ๋ฌธ
1
10000
2020-01-01
2
๊ฒฝ์
1
9000
2021-02-05
3
๊ฒฝ์
2
9000
2021-03-11
AUTHOR_ID
AUTHOR_NAME
1
ํ๊ธธ๋
2
๊น์ํธ
BOOK_ID
SALES_DATE
SALES
1
2022-01-01
2
2
2022-01-02
3
1
2022-01-05
1
2
2022-01-20
5
2
2022-01-21
6
3
2022-01-22
2
2
2022-02-11
3
2022๋
1์์ ๋์ ๋ณ ์ด ๋งค์ถ์ก์ ๋์ ID ๊ฐ 1 ์ธ ๋์๊ฐ ์ด 3๊ถ * 10,000์ = 30,000์, ๋์ ID ๊ฐ 2 ์ธ ๋์๊ฐ ์ด 14๊ถ * 9,000 = 126,000์ ์ด๊ณ , ๋์ ID ๊ฐ 3 ์ธ ๋์๊ฐ ์ด 2๊ถ * 9,000 = 18,000์ ์
๋๋ค.
์ ์ ๋ณ ์นดํ
๊ณ ๋ฆฌ ๋ณ๋ก ๋งค์ถ์ก์ ์ง๊ณํ๋ฉด ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
AUTHOR_ID
AUTHOR_NAME
CATEGORY
TOTAL_SALES
1
ํ๊ธธ๋
์ธ๋ฌธ
30000
1
ํ๊ธธ๋
๊ฒฝ์
126000
2
๊น์ํธ
๊ฒฝ์
18000
๊ทธ๋ฆฌ๊ณ ์ ์ ID, ์นดํ
๊ณ ๋ฆฌ ์์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋์์ผ ํฉ๋๋ค.
AUTHOR_ID
AUTHOR_NAME
CATEGORY
TOTAL_SALES
1
ํ๊ธธ๋
์ธ๋ฌธ
30000
1
ํ๊ธธ๋
๊ฒฝ์
126000
2
๊น์ํธ
๊ฒฝ์
18000
4) ํ์ด
SELECT b.AUTHOR_ID
, a.AUTHOR_NAME
, b.CATEGORY
, SUM(PRICE * SALES) AS "TOTAL_SALES"
FROM BOOK b
INNER JOIN (SELECT BOOK_ID, SUM(SALES) AS "SALES"
FROM BOOK_SALES
WHERE DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-01'
GROUP BY BOOK_ID) s
ON b.BOOK_ID = s.BOOK_ID
INNER JOIN AUTHOR a
ON b.AUTHOR_ID = a.AUTHOR_ID
GROUP BY b.AUTHOR_ID, CATEGORY
ORDER BY 1 ASC, 3 DESC;
[Reference]
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์
๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์
๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr