programmers.co.kr/learn/courses/30/lessons/62284
๋ฌธ์
CART_PRODUCTS ํ ์ด๋ธ์ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ์ํ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ์ ๋๋ค. CART_PRODUCTS ํ ์ด๋ธ์ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ID, CART_ID, NAME, PRICE๋ ๊ฐ๊ฐ ํ ์ด๋ธ์ ์์ด๋, ์ฅ๋ฐ๊ตฌ๋์ ์์ด๋, ์ํ ์ข ๋ฅ, ๊ฐ๊ฒฉ์ ๋ํ๋ ๋๋ค.
๋ฐ์ดํฐ ๋ถ์ ํ์์๋ ์ฐ์ (Milk)์ ์๊ฑฐํธ(Yogurt)๋ฅผ ๋์์ ๊ตฌ์ ํ ์ฅ๋ฐ๊ตฌ๋๊ฐ ์๋์ง ์์๋ณด๋ ค ํฉ๋๋ค. ์ฐ์ ์ ์๊ฑฐํธ๋ฅผ ๋์์ ๊ตฌ์ ํ ์ฅ๋ฐ๊ตฌ๋์ ์์ด๋๋ฅผ ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์ฅ๋ฐ๊ตฌ๋์ ์์ด๋ ์์ผ๋ก ๋์์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด CART_PRODUCTS ํ ์ด๋ธ์ด ๋ค์๊ณผ ๊ฐ๋ค๋ฉด
- 83๋ฒ ์ฅ๋ฐ๊ตฌ๋์๋ Milk์ Yogurt๊ฐ ๋ชจ๋ ์์ต๋๋ค.
- 286๋ฒ ์ฅ๋ฐ๊ตฌ๋์๋ Milk์ Yogurt๊ฐ ๋ชจ๋ ์์ต๋๋ค.
- 448๋ฒ ์ฅ๋ฐ๊ตฌ๋์๋ Milk์ Yogurt๊ฐ ๋ชจ๋ ์์ต๋๋ค.
- 1034๋ฒ ์ฅ๋ฐ๊ตฌ๋์๋ Milk๋ ์๊ณ Yogurt๋ง ์์ต๋๋ค.
๋ฐ๋ผ์ SQL ๋ฌธ์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋์์ผ ํฉ๋๋ค.
๋ด๊ฐ ํ ํ์ด
1. ์ฐ์ Milk์ Yogurt๋ฅผ ๋ด์ ์ฅ๋ฐ๊ตฌ๋๊ฐ ๋ฌด์์ด ์๋์ง ์์๋ณด๊ธฐ ์ํด ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
SELECT DISTINCT CART_ID
, NAME
FROM CART_PRODUCTS
WHERE (NAME LIKE 'Milk' OR NAME LIKE 'Yogurt')
NAME์ 'Milk' ๋๋ 'Yogurt'๊ฐ ๋ค์ด๊ฐ๋ ์ฅ๋ฐ๊ตฌ๋์ CART_ID์ NAME์ ์ถ๋ ฅํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
๋ํ, MILK ํน์ YOGURT ๋ฅผ ๋ด์ ๋์ผํ ์ฅ๋ฐ๊ตฌ๋๊ฐ ์ฌ๋ฌ๊ฐ๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด DISTINCT๋ฅผ ๊ฑธ์ด์ฃผ์๋ค.
์ด์ ๋ํ ๊ฒฐ๊ณผ๋ ์๋ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
2. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋, ๋์ผํ CART_ID ๋ด์ MILK, YOGURT๊ฐ ๋ชจ๋ ๋ค์ด๊ฐ ์์ด์ผ ํ๋ค. ๋ฐ๋ผ์ ๋๋ <๊ทธ๋ฆผ 1>์ ํ ์ด๋ธ์ ํ์ฉํ๋ฉด ๋๋ค๊ณ ํ๋จํ๋ค.
<๊ทธ๋ฆผ 1> ํ ์ด๋ธ์ CART_ID ๊ธฐ์ค์ผ๋ก GROUP BY ํด์ COUNT ํด์ฃผ๋ฉด, MILK์ YOGURT๊ฐ ๋ชจ๋ ๋ค์ด์์ผ๋ฉด 2, ๋ ์ค ํ๋๋ง ๋ค์ด์์ผ๋ฉด 1์ด ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
<๊ทธ๋ฆผ 1>์์๋ ๋ณด๋ฉด 286 - YOGURT , 286 - MILK => 286์ ๋๋ฒ ๋ฑ์ฅํ๊ณ , 287 - MILK ๋ ํ ๋ฒ๋ง ๋ฑ์ฅํ๋ค. ์์ DISTINCT๋ฅผ ๊ฑธ์ด์ฃผ์ด ์ค๋ณต์ ๋ง์๊ธฐ ๋๋ฌธ์, MILK๋ฅผ ๋๋ฒ๋ด์์ COUNT = 2 ๊ฐ ๋๋ฉด ์ด์ฉ์ง? ํ๋ ๊ฑฑ์ ์ ์ํด๋ ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, <๊ทธ๋ฆผ 1>์์ CART_ID ๋ฅผ COUNT ํด์ฃผ๊ณ , 2 ์ด์์ CART_ID๋ฅผ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค. ๋๋ ์ด๊ฒ์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํด์ ์ถ๋ ฅํด๋ณด์๋ค.
<< ์ ๋ต >>
SELECT A.CART_ID
FROM (SELECT DISTINCT CART_ID
, NAME
FROM CART_PRODUCTS
WHERE (NAME LIKE 'Milk' OR NAME LIKE 'Yogurt')) A
GROUP BY A.CART_ID
HAVING COUNT(A.CART_ID) > 1
ORDER BY A.CART_ID
์์ <๊ทธ๋ฆผ 1>์ ์ถ๋ ฅํ๋ ์ฟผ๋ฆฌ๋ฅผ FROM์ ์ ์๋ธ์ฟผ๋ฆฌ๋ก ๋ฃ์๋ค. ๋ฐ๋ผ์ ์ด ์ฝ๋๋ฅผ ํด์ํด๋ณด๋ฉด,
<๊ทธ๋ฆผ 1>์์ CART_ID ๊ธฐ์ค์ผ๋ก GROUPํ ํ ํ, COUNT(CART_ID) ๊ฐ 1์ด์์ด ๋๋ CART_ID๋ฅผ SELECTํ๋ค๋ ์๋ฏธ๊ฐ ๋๋ค. ๋ง์ง๋ง์ผ๋ก CART_ID ์์ผ๋ก ์ ๋ ฌํ๋ฉด์ ๋๋งบ์ผ๋ฉด ๋๋ค.
LEVEL 4๋ก ๊ฐ์ฅ ์ ์ ์ธ์์ด ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ํ์ง๋ง ์๋ธ์ฟผ๋ฆฌ์ ๋ํ ์ดํด์, ํ ์ด๋ธ์ ๋ถ๋ฆฌํด์ ์๊ฐํ ์ ์๋ ๋ฅ๋ ฅ์ด ๊ฐ์ถฐ์ ธ ์๋ค๋ฉด ์ฝ๊ณ ๋น ๋ฅด๊ฒ ํ ์ ์์ ๊ฒ์ด๋ค!