<๋ฐ์ดํฐ ์ฒดํฌ>
<
๋ฌธ์ ์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค, ์ํ๋ถ๋ฅ๋ณ ๊ฐ์ฅ ๋น์ผ ์ํ์ ์ ๋ณด ์กฐํํ๊ธฐ
ํ ์ด๋ธ๋ช : food_product์ด๋ ๋ํ๋งํธ์ ์ํ ์ ๋ณด ํ ์ด๋ธ ๊ฒฌ๋ณธ
์ปฌ๋ผ๋ช : product_id์ ํ์๋ณ์ฝ๋, product_name์ ํ๋ช , product_cd์ํ์ฝ๋, category์นดํ ๊ณ ๋ฆฌ๋ช , price๊ฐ๊ฒฉ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ฑ: 1๊ฐ ํ ์ด๋ธ, 5๊ฐ ์ปฌ๋ผ, 40๊ฐ ๋ก์ฐ
>
<์๋๋ฆฌ์ค>
๋น์ ์ A์ํ ์์ ํ ๋ด๋น์๋ค. ๋ฐ์ดํฐ๋ฅผ ํตํด ์ ๋์ ์ผ๋ก ์ ํ๋ณ ํ๋งค ์ฑ๊ณผ๋ฅผ ํ์ธํ๊ณ ์ ๋งํธ ์ ์ฐ ๊ธฐ์ฌ๋ ์์ฌ ์ํ ๊ธฐ๋ฐ์ผ๋ก EDAํ์์ ๋ฐ์ดํฐ ๋ถ์๋ฅผ ์งํํด๋ณด๋ ค๊ณ ํ๋ค. food_product ํ ์ด๋ธ์์ ์ํ๋ถ๋ฅ๋ณ๋ก ๊ฐ๊ฒฉ์ด ๊ฐ์ฅ ๋น์ธ๊ฑฐ๋ ์ผ '๊ณผ์', '๊ตญ', '๊น์น', '์์ฉ์ '์ category, price, product_name์ ์กฐํํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ์ฟผ๋ฆฌ๋ฅผ ์ง์ผ ํ ๊น?
<ํ์ด>
'์ํ๋ถ๋ฅ๋ณ' ์ด๋ผ ํ์ผ๋ ์ํ์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ผ ํ๋ค. ๋, GROUP BY์ ์๋์ฐ ํจ์ ์ค์๋ ์๋์ฐ ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ์๋๋ฉด ์ฐ์ฐ๋ ๊ฒฐ๊ณผ๊ฐ์ด ์๋๋ผ ์ฐ์ฐ์ ๋ง๋ ๊ฐ์ ๊ฐ์ง ๋ก์ฐ์ ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํด์ผ ํ๋๊น. ์ด ๋ถ๋ถ์ ๋ํด ์ข ๋ ๊น์ด ์๊ณ ์ถ๋ค๋ฉด ์๋์ฐ ํจ์Window Function VS GROUP BY ํฌ์คํธ๋ฅผ ์ฝ์ผ๋ฉด ๋๋ค.
WHERE์ ์ด ๊ธธ์ด์ง๊ฒ ๋ค. 1) '๊ณผ์', '๊ตญ', '๊น์น', '์์ฉ์ ' category์ ์ํ ์ค์ 2) ์ํ๋ถ๋ฅ๋ณ๋ก ๊ฐ๊ฒฉ์ด ๊ฐ์ฅ ๋น์ธ๊ฑฐ๋/ ์ผ ์ํ๋ง ๊ณจ๋ผ ์ถ๋ ฅํด์ผ ํ๋๊น. ์ด๋ฅผ ๋ฐ์ํด WHERE์ ์ ์ฐ๋ฉด ์๋์ ๊ฐ๋ค. ์ด๋ฅผ ๋ณด๋ฉด ์๋ธ์ฟผ๋ฆฌ๋ฅผ IN ๋ค์ ์กฐ๊ฑด์ ๋ก ๋ฃ์ด ์คฌ๋๋ฐ, ์ด์ ๋ํด ๊ถ๊ธํ๋ค๋ฉด ๋ค์คํ ์๋ธ์ฟผ๋ฆฌ ๊ด๋ จํด ์ฐพ์๋ณด๋ฉด ๋๋ค.
WHERE category IN('๊ณผ์', '๊ตญ', '๊น์น', '์์ฉ์ ')
AND price IN (SELECT MAX(price) OVER (PARTITION BY category) FROM food_product)
-- ๊ฐ์ฅ ๋น์ผ ์ํ์ ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๊ฑฐ๋
WHERE category IN('๊ณผ์', '๊ตญ', '๊น์น', '์์ฉ์ ')
AND price IN (SELECT MIN(price) OVER (PARTITION BY category) FROM food_product)
-- ๊ฐ์ฅ ์ผ ์ํ์ ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๊ฑฐ๋
๋ํ ์ ๋ฌธ์ ์๋์ ๊ฐ์ด ์ธ ์ ์์ ๊ฒ์ด๋ค.
SELECT category
, price
, product_name
FROM food_product
WHERE category IN('๊ณผ์', '๊ตญ', '๊น์น', '์์ฉ์ ')
AND price IN (SELECT MAX(price) OVER (PARTITION BY category) FROM food_product)
-- ๊ฐ์ฅ ๋น์ผ ์ํ๋ค๋ง ์ถ๋ ฅ
ORDER BY price DESC
SELECT category
, price
, product_name
FROM food_product
WHERE category IN('๊ณผ์', '๊ตญ', '๊น์น', '์์ฉ์ ')
AND price IN (SELECT MIN(price) OVER (PARTITION BY category) FROM food_product)
-- ๊ฐ์ฅ ์ผ ์ํ๋ค๋ง ์ถ๋ ฅ
ORDER BY price DESC