Day 19
GROUP BY๊ตฌ๋ ์ด๋ฆ ๊ทธ๋๋ก ์งํฉ์ ๊ทธ๋ฃน์ผ๋ก ๋๋๋ ๋ฐฉ๋ฒ์ด๋ค
GROUP BY๋ก ๊ทธ๋ฃนํ
group by๋ ํน์ ํ ์ด์ ์ก์์ ๊ทธ๋ฃนํ ์ํฌ ์ ์๋ค
name์ด๋ผ๋ ํ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํ๋ฅผ ํด๋ณด์
์ด๋ ๊ฒ ๋ด๋ณด๋ฉด ์ผ๋จ ๊ทธ๋ฃนํํ๊ณ ์ถ๋ค๋ฉด ๊ทธ๋ฃนํํ๊ณ ์ถ์ ํ๋ง select๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ ์ ๋ณผ ์ ์๊ณ
๊ทธ๋ฆฌ๊ณ group by๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด distinct๋ฅผ ๊ฑธ์์ ๋์ฒ๋ผ ์ค๋ณต๋ ํ์ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ฌ์ ๋์ค๊ฒ ๋๋ค
์ฑ
์์๋ group by๋ ์ง๊ณํจ์์ ํจ๊ป ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ณ๋ก ์๋ฏธ์๋ค๊ณ ํ๋ค..! ๊ทธ๋๋ ์์๋ ๋ฌ์ผ์ง
๊ทธ๋ผ ์ง๊ณํจ์์์๋ ์ด๋ป๊ฒ ์ฐ๋์ง ๋ณด์
์ผ๋จ name์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํ์ ํ๊ณ , ๊ฐ nameํ์ ๊ฐฏ์, ๊ฐ ์ด๋ฆ์ด ๊ฐ์ง ๊ฐ๋ค์ ํฉ์ ์ฟผ๋ฆฌํ๋ค
nameํ์ ์์์ํ ๊ฒ๊ณผ ๊ฐ๊ฒ name์ distinctํ๊ฒ ๊ฐ์ ธ์จ ๊ฒ์ ๋ณผ ์ ์๊ณ
nameํ์ ๊ฐฏ์๋ฅผ ์ธ๋๋ฐ, ์ผ๋จ countํจ์๋ null์ ์ธ์ง ์๊ธฐ ๋๋ฌธ์ 0์ด ๋์จ ๊ฒ์ ๋ณผ ์ ์๊ณ , A๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ํ์ด 2๊ฐ์ด๊ธฐ ๋๋ฌธ์ 2๊ฐ ๋์จ ๊ฒ์ ๋ณผ ์ ์์
HAVING ๊ตฌ๋ก ์กฐ๊ฑด ์ง์
์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ๋๋ฐ ์์ด์ WHERE์ ์ ์กฐ๊ฑด์์์๋ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ด ์๋๋ฐ ์ด ์ด์ ๋ WHERE์ ์ด ๋จผ์ ์คํ๋๊ณ ๋์ ๊ทธ ๋ค์์ผ๋ก GROUP BY์ ์ด ์คํ๋๋ ์คํ ์์์ ๋ํ ์ฐจ์ด๊ฐ ์กด์ฌํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค ๋ด๋ถ ์ฒ๋ฆฌ ์์๋ ์ด๋ฌํ๋ค : WHERE -> GROUP BY -> SELECT -> ORDER BY ๊ทธ๋์ ์ง๊ณํ ๊ฒฐ๊ณผ๋ฅผ ์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ ๋ฐ๋ก ๊ฑธ๋ฌ๋ด๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก SELECT์ ์๋ HAVING์ ์ด๋ค ์ด๊ฑธ ์ฌ์ฉํด๋ฉด ์ง๊ณํจ์๋ฅผ ํตํด ์ป์ ๊ฐ์ ์กฐ๊ฑด์์ผ๋ก ๊ฑฐ๋ฅผ ์ ์๋ค ใ ใฑ
HAVING์ ์ group by๋ค์ ์์ฑํ๊ณ , where์ ๊ณผ ๋์ผํ๊ฒ ์กฐ๊ฑด์์ ์ง์ ํ ์ ์๋ค
์กฐ๊ฑด์์๋ ๊ทธ๋ฃน๋ณ๋ก ์ง๊ณ๋ ์ด์ ๊ฐ์ด๋ ์ง๊ณํจ์์ ๊ณ์ฐ๊ฒฐ๊ณผ๊ฐ ์ ๋ฌ๋๋ค๊ณ ์๊ฐํ๋ฉด ํธํ๋ค
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ณด๋ฉด WHERE์ ์ผ๋ก ๊ฒ์์ ๋จผ์ ํ๊ณ -> ๊ทธ๊ฒ์ ๊ทธ๋ฃนํํ๊ณ -> HAVING์ผ๋ก ์กฐ๊ฑด์ ๋ง๋ ๊ฒ์ ์ฐพ๋ ๋ฐฉ์์ด๋ค
์ด๋ ๊ฒ ๊ทธ๋ฃนํ๋ฅผ ๋ง์น ๊ฐ๋ค์ ๊ธฐ์ค์ผ๋ก ์กฐ๊ฑด์ ํ๋ฒ ๋ ๊ฑธ ์ ์๋ค๋ ์ ์ด๋ค
HAVING์ ๋ดค์ผ๋๊น ๋ด๋ถ ์ฒ๋ฆฌ ์์์ ๋ณ๋์ด ์๊ธด๋ค ๋ด๋ถ ์ฒ๋ฆฌ ์์ : WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
๊ทธ๋ฃนํ๋ณด๋ค ๋ ๋ฆ๊ฒ ์ฒ๋ฆฌ๋๋ ORDER BY๊ตฌ์์๋ ์ง๊ณํจ์๋ฅผ ๋ฌธ์ ์์ด ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค
ํ์ง๋ง ์ฐธ๊ณ ๋ก AS๋ก ๋ณ๋ช
์ ๋ถํ ๊ฒ์ order by์์๋ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ๊ธฐ์ตํ์ ๋ณ๋ช
์ select๊น์ง ์ฌ์ฉํ ์ ์๋ ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ ํ์ค์ ๊ธฐ์ค์ผ๋ก๋ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ๊ธฐ์ตํ์->MySQL์์๋ ๊ฐ๋ฅ
๋ณต์์ด์ ๊ทธ๋ฃนํ
์์์ group by๋ฅผ ์ฌ์ฉํ ๋ ๊ทธ๋ฃนํํ ๊ฐ๋ง์ selectํ์๋๋ฐ, ์ฌ๊ธฐ์๋ ์ด์ ๊ฐ ์๋ค ์ผ๋จ group by๋ก ์ด๋ ํ ํ์ ์ก์์ ๊ฒฝ์ฐ์๋ ๊ทธ๋ฃนํ์ ์ง์ ํ ๊ฐ ํ๋๋ง์ ๊ฐ์ง๊ณ selectํ ์ ์๋ค ๋ง์ฝ์ select name, quantity from sample51 group by name ์ด๋ ๊ฒ ํ๋ฉด ์๋ฌ๊ฐ ๋ฌ๋ค๋ ๊ฒ์ด๋ค ์ด์ ๋ group by๋ก ๊ทธ๋ฃนํ๋ฅผ ํ๋ฉด ํด๋ผ์ด์ธํธ๋ก ๋ฐํ๋๋ ๊ฒฐ๊ณผ๋ ๊ทธ๋ฃน๋น ํ๋์ ํ์ด๋ค group by๋ฅผ name์ผ๋ก ์ ๋ ฌํ๋๋ฐ, select์์ name, quantity๋ฅผ ์ก๊ณ ์์ผ๋ฉด group by์ฒ๋ฆฌ ํ ์ด๋ค ๊ฒ์ ๋ฐํํด์ผํ๋์ง ์ ๋งคํ๊ธฐ ๋๋ฌธ์ ์๋ฌ๋ฅผ ๋ฑ๋ ๊ฒ์ด๋ค ํด๊ฒฐ๋ฐฉ๋ฒ? ์ผ๋ก๋ ๋ค๋ฅธ ํ์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ์ซ์์ ๊ฐ๋ ์ธ ์ง๊ณํจ์๋ฅผ ๋๋ฆฐ ๊ฐ์ ์ง์ด๋ฃ์ผ๋ฉด ์ ์์ ์ผ๋ก ์๋ํ๋ค ์์๋ก ๋ณด๋ฉด select name, sum(quantity) from sample51 group by name ์ด๋ ๊ฒ๋ ์ ์๋ ๋๋ ๋ค์์ ํ์ selectํด์ผ ํ๋ค๋ฉด group by์์๋ ๊ทธ ๋ค์์ ํ์ ์ฒ๋ฆฌํด์ฃผ๋ฉด ์ ์๋ํ๋ค => GROUP BY์์ ์ง์ ํ ์ด ์ด์ธ์ ์ด์ ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ์ง ์์ ์ฑ select ๊ตฌ์ ์ง์ ํ ์ ์๋ค
๊ฒฐ๊ณผ๊ฐ ์ ๋ ฌ
GROUP BY๋ก ๊ฐ์ ๊ทธ๋ฃนํํด๋ ์คํ๊ฒฐ๊ณผ ์์๋ฅผ ์ ๋ ฌํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด๋ถ ์ฒ๋ฆฌ์์ ๊ฐ์ ๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋๋๋ ๊ณผ์ ์์ ์์๊ฐ ์๋ก ๋ฐ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๋ ์์ group by๋ก ๊ฐ์ ์ ๋ ฌํ๋ค๊ณ ํ๋๋ผ๋ ๊ทธ๋ฃนํํ ๊ฐ์ด ์๋๋๋ผ๋ order by๋ฅผ ์ฌ์ฉํด์ ์ ๋ ฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ํ์ํ ์ ๋ ฌ์ ์ฌ์ฉํด์ ๊ฒฐ๊ณผ๋ฌธ์ ์ ๋ ฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค
Last updated
Was this helpful?