๐ข ๋ณธ ํฌ์คํ ์ ํ์ฉ๋๋ ๊ธฐ๋ณธ ๋ฌธ์ ๋ฐ ์๋ฃ ์ถ์ฒ๋
ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ
์คํธ ์ฐ์ต,
https://school.programmers.co.kr/learn/challenges?page=1&languages=mysql%2Coracle์์ ๋ฐํ๋๋ค.
โ ๋ฌธ์
๋ฌธ์ ์ค๋ช
๋ค์์ ์ด๋ ์๋ฅ ์ผํ๋ชฐ์์ ํ๋งค์ค์ธ ์ํ๋ค์ ์ ๋ณด๋ฅผ ๋ด์ PRODUCT ํ ์ด๋ธ์ ๋๋ค. 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์๋ฆฌ๋ ์นดํ ๊ณ ๋ฆฌ ์ฝ๋๋ฅผ ๋ํ๋ ๋๋ค.
๋ฌธ์
PRODUCT ํ ์ด๋ธ์์ ๋ง์ ๋จ์์ ๊ฐ๊ฒฉ๋ ๋ณ๋ก ์ํ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์ปฌ๋ผ๋ช ์ ๊ฐ๊ฐ ์ปฌ๋ผ๋ช ์ PRICE_GROUP, PRODUCTS๋ก ์ง์ ํด์ฃผ์๊ณ ๊ฐ๊ฒฉ๋ ์ ๋ณด๋ ๊ฐ ๊ตฌ๊ฐ์ ์ต์๊ธ์ก(10,000์ ์ด์ ~ 20,000 ๋ฏธ๋ง์ธ ๊ตฌ๊ฐ์ธ ๊ฒฝ์ฐ 10,000)์ผ๋ก ํ์ํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ๊ฐ๊ฒฉ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
โ ํ์ด
๋ฌธ์ ์๊ตฌ์ฌํญ
PRODUCT ํ ์ด๋ธ์์ ๋ง์ ๋จ์์ ๊ฐ๊ฒฉ๋ ๋ณ๋ก ์ํ ๊ฐ์๋ฅผ ์ถ๋ ฅ > ๊ทธ๋ฃนํ
์ด๋ ์ปฌ๋ผ๋ช ์ ๊ฐ๊ฐ ์ปฌ๋ผ๋ช ์ PRICE_GROUP, PRODUCTS๋ก ์ง์ > ALIAS ์ฌ์ฉ
๊ฐ๊ฒฉ๋ ์ ๋ณด๋ ๊ฐ ๊ตฌ๊ฐ์ ์ต์๊ธ์ก(10,000์ ์ด์ ~ 20,000 ๋ฏธ๋ง์ธ ๊ตฌ๊ฐ์ธ ๊ฒฝ์ฐ 10,000)์ผ๋ก ํ์*
๊ฒฐ๊ณผ๋ ๊ฐ๊ฒฉ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ > ์ ๋ ฌ์กฐ๊ฑด1
* ๊ฐ๊ฒฉ๋๋ณ ๊ทธ๋ฃนํ์ ์ํด์๋ ๊ธ์ก ๊ตฌ๊ฐ๋๋ณ๋ก ๊ธฐ์ค ๊ธ์ก์ผ๋ก ์ค์ ํด์ผ ํจ.
PRICE ๋ฐ์ดํฐ ํ์ INTEGER์ด๋ฏ๋ก ์ซ์์ ์ธ ์ ์๋ ํจ์ ์ค TRUNCATE()๋ฅผ ์ฌ์ฉํ๋ฉด a ์ด์ b ๋ฏธ๋ง ๋ฒ์๋ก ๊ตฌ๊ฐ๋๋ฅผ ๋ง๋ค ์ ์์.
TRUNCATE(์ซ์, ์๋ฆฟ์) > ์๋ฆฟ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฒ๋ฆผ
ํ์ด ์์)
๊ฐ๊ฒฉ๋ ์ปฌ๋ผ(PRICE_GROUP) ์์ฑ → ๊ฐ๊ฒฉ๋ ๊ธฐ์ค GROUP BY→ ๊ฐ๊ฒฉ๋๋ณ ๊ฐฏ์ COUNT→ ์ ๋ ฌ ORDER BY
SELECT TRUNCATE(PRICE, -4) AS PRICE_GROUP,
COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY 1
ORDER BY 1
๐ ์ซ์ํจ์ ๋ณต์ต
ํจ์ |
๊ฒฐ๊ณผ |
ABS(num) | ์ ๋๊ฐ |
CEIL(num) | ๊ฐ๋ณด๋ค ํฐ ์ ์ ์ค ๊ฐ์ฅ ์์ ์ ์ (์์์ ์ดํ ์ฌ๋ฆผ) |
FLOOR(num) | ๊ฐ๋ณด๋ค ์์ ์ ์ ์ค ๊ฐ์ฅ ํฐ ์ ์ (์์์ ์ดํ ๋ฒ๋ฆผ) |
ROUND(num, ์๋ฆฟ์) | ์๋ฆฟ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ฌ๋ฆผ |
TRUNCATE(num, ์๋ฆฟ์) | ์๋ฆฟ์ ๊ธฐ์ค์ผ๋ก ๋ฒ๋ฆผ |
POW(X, Y) POWER(X, Y) |
X์ Y์น |
MOD(a, b) | a๋ฅผ b๋ก ๋๋ ๋๋จธ์ง |
GREATEST(num1, num2…) | ์ฃผ์ด์ง ์ซ์ ์ค ๊ฐ์ฅ ํฐ ๊ฐ |
LEAST(num1, num2…) | ์ฃผ์ด์ง ์ซ์ ์ค ๊ฐ์ฅ ์์ ๊ฐ |