๐ข ๋ณธ ํฌ์คํ ์ ํ์ฉ๋๋ ๊ธฐ๋ณธ ๋ฌธ์ ๋ฐ ์๋ฃ ์ถ์ฒ๋
ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ
์คํธ ์ฐ์ต,
https://school.programmers.co.kr/learn/challenges?page=1&languages=mysql%2Coracle์์ ๋ฐํ๋๋ค.
โ ๋ฌธ์
๋ฌธ์ ์ค๋ช
๋ค์์ ์์ด์คํฌ๋ฆผ ๊ฐ๊ฒ์ ์๋ฐ๊ธฐ ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ๋ด์ FIRST_HALF ํ ์ด๋ธ๊ณผ 7์์ ์์ด์คํฌ๋ฆผ ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ๋ด์ JULY ํ ์ด๋ธ์ ๋๋ค. FIRST_HALF ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, SHIPMENT_ID, FLAVOR, TOTAL_ORDER๋ ๊ฐ๊ฐ ์์ด์คํฌ๋ฆผ ๊ณต์ฅ์์ ์์ด์คํฌ๋ฆผ ๊ฐ๊ฒ๊น์ง์ ์ถํ ๋ฒํธ, ์์ด์คํฌ๋ฆผ ๋ง, ์๋ฐ๊ธฐ ์์ด์คํฌ๋ฆผ ์ด์ฃผ๋ฌธ๋์ ๋ํ๋ ๋๋ค. FIRST_HALF ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค๋ FLAVOR์ ๋๋ค. FIRST_HALFํ ์ด๋ธ์ SHIPMENT_ID๋ JULYํ ์ด๋ธ์ SHIPMENT_ID์ ์ธ๋ ํค์ ๋๋ค.
NAME | TYPE | NULLABLE |
SHIPMENT_ID | INT(N) | FALSE |
FLAVOR | VARCHAR(N) | FALSE |
TOTAL_ORDER | INT(N) | FALSE |
JULY ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, SHIPMENT_ID, FLAVOR, TOTAL_ORDER ์ ๊ฐ๊ฐ ์์ด์คํฌ๋ฆผ ๊ณต์ฅ์์ ์์ด์คํฌ๋ฆผ ๊ฐ๊ฒ๊น์ง์ ์ถํ ๋ฒํธ, ์์ด์คํฌ๋ฆผ ๋ง, 7์ ์์ด์คํฌ๋ฆผ ์ด์ฃผ๋ฌธ๋์ ๋ํ๋ ๋๋ค. JULY ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค๋ SHIPMENT_ID์ ๋๋ค. JULYํ ์ด๋ธ์ FLAVOR๋ FIRST_HALF ํ ์ด๋ธ์ FLAVOR์ ์ธ๋ ํค์ ๋๋ค. 7์์๋ ์์ด์คํฌ๋ฆผ ์ฃผ๋ฌธ๋์ด ๋ง์ ๊ฐ์ ์์ด์คํฌ๋ฆผ์ ๋ํ์ฌ ์๋ก ๋ค๋ฅธ ๋ ๊ณต์ฅ์์ ์์ด์คํฌ๋ฆผ ๊ฐ๊ฒ๋ก ์ถํ๋ฅผ ์งํํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๊ฐ์ ๋ง์ ์์ด์คํฌ๋ฆผ์ด๋ผ๋ ๋ค๋ฅธ ์ถํ ๋ฒํธ๋ฅผ ๊ฐ๊ฒ ๋ฉ๋๋ค.
NAME | TYPE | NULLABLE |
SHIPMENT_ID | INT(N) | FALSE |
FLAVOR | VARCHAR(N) | FALSE |
TOTAL_ORDER | INT(N) | FALSE |
๋ฌธ์
7์ ์์ด์คํฌ๋ฆผ ์ด ์ฃผ๋ฌธ๋๊ณผ ์๋ฐ๊ธฐ์ ์์ด์คํฌ๋ฆผ ์ด ์ฃผ๋ฌธ๋์ ๋ํ ๊ฐ์ด ํฐ ์์๋๋ก ์์ 3๊ฐ์ ๋ง์ ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
โ ํ์ด
๋ฌธ์ ์๊ตฌ์ฌํญ
7์ ์์ด์คํฌ๋ฆผ ์ด ์ฃผ๋ฌธ๋ + ์๋ฐ๊ธฐ ์์ด์คํฌ๋ฆผ ์ด ์ฃผ๋ฌธ๋์ ๋ํ๊ฐ ์์ 3์ ๋ง ์ถ๋ ฅํ๊ธฐ
์ฃผ์ํ ์
· JOIN ์
JULY ํ ์ด๋ธ์์๋ ์ฃผ๋ฌธ๋์ด ๋ง์ ๊ฐ์ ๋ง์ ์์ด์คํฌ๋ฆผ์ ๋ํด ๋ค๋ฅธ ๋ ๊ณต์ฅ์์ ์์ด์คํฌ๋ฆผ ๊ฐ๊ฒ๋ก ์ถํ๋ฅผ ์งํํจ.
> ๋ง๋ณ๋ก TOTAL_ORDER์ ๊ตฌํ๊ธฐ ์ํด์ ๊ทธ๋ฃนํ ํ์.
· JOIN ํ
๋ง๋ณ ์๋ฐ๊ธฐ ์ด ์ฃผ๋ฌธ๋๊ณผ 7์ ๋ง๋ณ ์ฃผ๋ฌธ๋์ ํฉ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด์ผ ํ๋ฏ๋ก ORDER BY์ 2 ์ปฌ๋ผ ์ฐ์ฐ ์ถ๊ฐ
์์ 3๊ฐ LIMIT ๋ฌธ๋ฒ์ฌ์ฉ
JOIN์์ ์ค์ํ๊ฒ ์๊ฐํ ๊ฒ = ๋ฌธ์ ์์ ์ ์ํ ์ธ๋ํค(FOREIGN KEY)
SELECT FH.FLAVOR
FROM FIRST_HALF FH
LEFT JOIN (SELECT FLAVOR, SUM(TOTAL_ORDER) TOTAL_ORDER
FROM JULY
GROUP BY FLAVOR) JO
ON FH.FLAVOR = JO.FLAVOR
ORDER BY FH.TOTAL_ORDER + JO.TOTAL_ORDER DESC
LIMIT 3
<์ฌํ์ด> 2022.01.11
SELECT FH.FLAVOR
FROM FIRST_HALF FH
LEFT JOIN JULY JL
ON FH.FLAVOR = JL.FLAVOR
GROUP BY 1
ORDER BY SUM(FH.TOTAL_ORDER + JL.TOTAL_ORDER) DESC
LIMIT 3