โ Group by๋?
๋์ผํ ๋ฒ์ฃผ๋ฅผ ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋๋ก ๋ฌถ์ด์, ๋ฒ์ฃผ๋ณ ํต๊ณ๋ฅผ ๋ด์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
Group by๋ฅผ ์ด์ฉํ๋ฉด 1) ๊ฐ์ ์ฑ์จ์ ๋ฐ์ดํฐ๋ฅผ ํ๋๋ก ๋ฌถ๊ณ 2) ๊ฐ ์ฑ์จ์ ํ์์๋ฅผ ๊ตฌํ ์ ์๋ค.
ex1) select name, count(๋ณ) from users
group by name

โ ๋ฐ์ดํฐ๊ฐ ๊น๋ํ๊ฒ ์ ๋ ฌ๋๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
(โ๋ฌด์กฐ๊ฑด Group by์ ํจ๊ป ์ฌ์ฉํด์ผ ๋๋ ๊ฒ์ ์๋, ๋จ๋ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅโ)
๊ฒฐ๊ณผ์ ๊ฐ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ
ex) select name, count(๋ณ) from users
group by name
order by count(๋ณ)

โ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด desc ๋ถ์ด๊ธฐ
ex) select name, count(๋ณ) from users
group by name
order by count(๋ณ) desc;

โ ์๋ฆฌ๋ ๊ฐ๋จ!
Where์ ๋ก ์กฐ๊ฑด์ด ํ๋ ์ถ๊ฐ๋๊ณ , ๊ทธ ์ดํ์ Group by, Order by๊ฐ ์คํ๋๋ ๊ฒ!
ex) select payment_method, count(๋ณ) from orders
where course_title = "์น๊ฐ๋ฐ ์ข
ํฉ๋ฐ"
group by payment_method;
๋์ผํ ๋ฒ์ฃผ์ ๊ฐ์ ๊ตฌํ๊ธฐ
๋์ผํ ๋ฒ์ฃผ์ ๊ฐฏ์๋ count(๋ณ)๋ฅผ ์ฌ์ฉํ๋ค.
ex) select ๋ฒ์ฃผ๋ณ๋ก ์ธ์ด์ฃผ๊ณ ์ถ์ ํ๋๋ช
, count(๋ณ) from ํ
์ด๋ธ๋ช
group by ๋ฒ์ฃผ๋ณ๋ก ์ธ์ด์ฃผ๊ณ ์ถ์ ํ๋๋ช
๋์ผํ ๋ฒ์ฃผ์์์ ์ต์๊ฐ ๊ตฌํ๊ธฐ
๋์ผํ ๋ฒ์ฃผ ํน์ ํ๋์ ์ต์๊ฐ์ min(ํ๋๋ช )์ ์ฌ์ฉํ๋ค.
ex) select ๋ฒ์ฃผ๊ฐ ๋ด๊ธด ํ๋๋ช
, min(์ต์๊ฐ์ ์๊ณ ์ถ์ ํ๋๋ช
) from ํ
์ด๋ธ๋ช
group by ๋ฒ์ฃผ๊ฐ ๋ด๊ธด ํ๋๋ช
๋์ผํ ๋ฒ์ฃผ์์์ ์ต๋๊ฐ ๊ตฌํ๊ธฐ
๋์ผํ ๋ฒ์ฃผ ํน์ ํ๋์ ์ต๋๊ฐ์ max(ํ๋๋ช )์ ์ฌ์ฉํ๋ค.
ex) select ๋ฒ์ฃผ๊ฐ ๋ด๊ธด ํ๋๋ช
, max(์ต๋๊ฐ์ ์๊ณ ์ถ์ ํ๋๋ช
) from ํ
์ด๋ธ๋ช
group by ๋ฒ์ฃผ๊ฐ ๋ด๊ธด ํ๋๋ช
๋์ผํ ๋ฒ์ฃผ์ ํ๊ท ๊ตฌํ๊ธฐ
๋์ผํ ๋ฒ์ฃผ ํน์ ํ๋์ ํ๊ท ๊ฐ์ avg(ํ๋๋ช )์ ์ฌ์ฉํ๋ค.
ex) select ๋ฒ์ฃผ๊ฐ ๋ด๊ธด ํ๋๋ช
, avg(ํ๊ท ๊ฐ์ ์๊ณ ์ถ์ ํ๋๋ช
) from ํ
์ด๋ธ๋ช
group by ๋ฒ์ฃผ๊ฐ ๋ด๊ธด ํ๋๋ช
๋์ผํ ๋ฒ์ฃผ์ ํฉ๊ณ ๊ตฌํ๊ธฐ
๋์ผํ ๋ฒ์ฃผ ํน์ ํ๋์ ํฉ๊ณ๋ sum(ํ๋๋ช )์ ์ฌ์ฉํ๋ค.
ex) select ๋ฒ์ฃผ๊ฐ ๋ด๊ธด ํ๋๋ช
, sum(ํฉ๊ณ๋ฅผ ์๊ณ ์ถ์ ํ๋๋ช
) from ํ
์ด๋ธ๋ช
group by ๋ฒ์ฃผ๊ฐ ๋ด๊ธด ํ๋๋ช
๋ณ์นญ ๊ธฐ๋ฅ : Alias
์ฟผ๋ฆฌ๊ฐ ์ ์ ๊ธธ์ด์ง๋ฉด์ ์ข ์ข ํท๊ฐ๋ฆฌ๋ ์ผ์ด ์๊ธธ ์ ์๋ค. ๊ทธ๋์ SQL์ Alias๋ผ๋ ๋ณ์นญ ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
ex) select * from orders o
where o.course_title = '์ฑ๊ฐ๋ฐ ์ข
ํฉ๋ฐ'
โ ํ ์ด๋ธ๋ช ๋ค์ as๋ฅผ ๋ถ์ฌ์ ๋ณ์นญ์ ์ถ๊ฐํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๊ณ , ์ถ๋ ฅ๋ ํ๋์ ๋ณ์นญ์ ๋ถ์ด๋ ๊ฒ๋ ๊ฐ๋ฅ!
ex) select payment_method, count(*) as cnt from orders o
where o.course_title = '์ฑ๊ฐ๋ฐ ์ข
ํฉ๋ฐ'
group by payment_method
