ํ๋ก๊ทธ๋๋จธ์ค_์ํ ๋ณ ์คํ๋ผ์ธ ๋งค์ถ ๊ตฌํ๊ธฐ
๋ฌธ์ ์ค๋ช
https://school.programmers.co.kr/learn/courses/30/lessons/131533
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋ค์์ ์ด๋ ์๋ฅ ์ผํ๋ชฐ์์ ํ๋งค์ค์ธ ์ํ๋ค์ ์ํ ์ ๋ณด๋ฅผ ๋ด์ PRODUCT ํ ์ด๋ธ๊ณผ ์คํ๋ผ์ธ ์ํ ํ๋งค ์ ๋ณด๋ฅผ ๋ด์ OFFLINE_SALE ํ ์ด๋ธ ์ ๋๋ค. PRODUCT ํ ์ด๋ธ์ ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก PRODUCT_ID, PRODUCT_CODE, PRICE๋ ๊ฐ๊ฐ ์ํ ID, ์ํ์ฝ๋, ํ๋งค๊ฐ๋ฅผ ๋ํ๋ ๋๋ค.
Column name | Type | Nullable |
PRODUCT_ID | INTEGER | FALSE |
PRODUCT_CODE | VARCHAR(8) | FALSE |
PRICE | INTEGER | FALSE |
์ํ ๋ณ๋ก ์ค๋ณต๋์ง ์๋ 8์๋ฆฌ ์ํ์ฝ๋ ๊ฐ์ ๊ฐ์ง๋ฉฐ, ์ 2์๋ฆฌ๋ ์นดํ
๊ณ ๋ฆฌ ์ฝ๋๋ฅผ ์๋ฏธํฉ๋๋ค.
OFFLINE_SALE ํ
์ด๋ธ์ ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด์์ผ๋ฉฐ OFFLINE_SALE_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE๋ ๊ฐ๊ฐ ์คํ๋ผ์ธ ์ํ ํ๋งค ID, ์ํ ID, ํ๋งค๋, ํ๋งค์ผ์ ๋ํ๋
๋๋ค.
Column name | Type | Nullable |
OFFLINE_SALE_ID | INTEGER | FALSE |
PRODUCT_ID | INTEGER | FALSE |
SALES_AMOUNT | INTEGER | FALSE |
SALES_DATE | DATE | FALSE |
๋์ผํ ๋ ์ง, ์ํ ID ์กฐํฉ์ ๋ํด์๋ ํ๋์ ํ๋งค ๋ฐ์ดํฐ๋ง ์กด์ฌํฉ๋๋ค.
๋ฌธ์
PRODUCT ํ ์ด๋ธ๊ณผ OFFLINE_SALE ํ ์ด๋ธ์์ ์ํ์ฝ๋ ๋ณ ๋งค์ถ์ก(ํ๋งค๊ฐ * ํ๋งค๋) ํฉ๊ณ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ๋งค์ถ์ก์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ ๋งค์ถ์ก์ด ๊ฐ๋ค๋ฉด ์ํ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
์์
์๋ฅผ ๋ค์ด PRODUCT ํ
์ด๋ธ์ด ๋ค์๊ณผ ๊ฐ๊ณ
PRODUCT_ID | PRODUCT_CODE | PRICE |
1 | A1000011 | 15000 |
2 | A1000045 | 8000 |
3 | C3000002 | 42000 |
OFFLINE_SALE ํ
์ด๋ธ์ด ๋ค์๊ณผ ๊ฐ๋ค๋ฉด
OFFLINE_SALE_ID | PRODUCT_ID | SALES_AMOUNT | SALES_DATE |
1 | 1 | 2 | 2022-02-21 |
2 | 1 | 2 | 2022-03-02 |
3 | 3 | 3 | 2022-05-01 |
4 | 2 | 1 | 2022-05-24 |
5 | 1 | 2 | 2022-07-14 |
6 | 2 | 1 | 2022-09-22 |
๊ฐ ์ํ ๋ณ ์ด ํ๋งค๋๊ณผ ํ๋งค๊ฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- PRODUCT_CODE๊ฐ A1000011์ธ ์ํ์ ์ด ํ๋งค๋์ด 6๊ฐ, ํ๋งค๊ฐ๊ฐ 15,000์
- PRODUCT_CODE๊ฐ A1000045 ์ธ ์ํ์ ์ด ํ๋งค๋์ด 2๊ฐ, ํ๋งค๊ฐ๊ฐ 8,000์
- PRODUCT_CODE๊ฐ C3000002 ์ธ ์ํ์ ์ด ํ๋งค๋์ด 3๊ฐ, ํ๋งค๊ฐ๊ฐ 42,000์
๊ทธ๋ฌ๋ฏ๋ก ๊ฐ ์ํ ๋ณ ๋งค์ถ์ก์ ๊ณ์ฐํ๊ณ ์ ๋ ฌํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๋์์ผ ํฉ๋๋ค.
PRODUCT_CODE | SALES |
C3000002 | 126000 |
A1000011 | 90000 |
A1000045 | 16000 |
๋ด๊ฐ ์์ฑํ ์ฝ๋
SELECT P.PRODUCT_CODE, SUM(P.PRICE * OS.SALES_AMOUNT) AS SALES
FROM PRODUCT P, OFFLINE_SALE OS
WHERE P.PRODUCT_ID = OS.PRODUCT_ID
GROUP BY P.PRODUCT_CODE
ORDER BY SALES DESC, P.PRODUCT_CODE;
์ฝ๋ ์ค๋ช
- SELECT P.PRODUCT_CODE, SUM(P.PRICE * OS.SALES_AMOUNT) AS SALES : PRODUCT ํ ์ด๋ธ์ PRODUCT_CODE ์ปฌ๋ผ, PRODUCT ํ ์ด๋ธ์ PRICE ์ปฌ๋ผ๊ณผ OFFLINE_SALE ํ ์ด๋ธ์ SALES_AMOUNT ์ปฌ๋ผ์ ๊ณฑ์ ์ปฌ๋ผ๋ช ์ SALES๋ผ๊ณ ์ง์ ํ๊ณ ์ ํํ๋ค.
- FROM PRODUCT P, OFFLINE_SALE OS : PRODUCT ํ ์ด๋ธ์ P, OFFLINE_SALES๋ฅผ OS๋ก ์ง์ ํ๊ณ ๋ ํ ์ด๋ธ์ ๋ชจ๋ ํ ์กฐํฉ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
- WHERE P.PRODUCT_ID = OS. PRODUCT_ID : PRODUCT ํ ์ด๋ธ์ PRODUCT_ID ์ปฌ๋ผ๊ณผ OFFLINE_SALES ํ ์ด๋ธ์ PRODUCT_ID ์ปฌ๋ผ์ด ๋์ผํ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์จ๋ค.
- GROUP BY P.PRODUCT_CODE : PRODUCT ํ ์ด๋ธ์ PRODUCT_CODE ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํํ๋ค.
- ORDER BY SALES DESC, P.PRODUCT_CODE : SALES ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๊ณ , ๋์ผํ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ PRODUCT ํ ์ด๋ธ์ PRODUCT_CODE๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ค.