[๊ฐœ๋ฐœ์ผ์ง€]SQL(Group by, Order by)๐ŸŒŸ

๊น€ํ•˜์˜ยท2023๋…„ 4์›” 14์ผ

01.๋™์ผํ•œ ๋ฒ”์ฃผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ์–ด์ฃผ๋Š” Group by

โœ…Group by๋ž€?
๋™์ผํ•œ ๋ฒ”์ฃผ๋ฅผ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ, ๋ฒ”์ฃผ๋ณ„ ํ†ต๊ณ„๋ฅผ ๋‚ด์ฃผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
Group by๋ฅผ ์ด์šฉํ•˜๋ฉด 1) ๊ฐ™์€ ์„ฑ์”จ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๊ณ  2) ๊ฐ ์„ฑ์”จ์˜ ํšŒ์›์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

ex1) select name, count(๋ณ„) from users
group by name

02.๊น”๋”ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋Š” Order by

โœ…๋ฐ์ดํ„ฐ๊ฐ€ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ ฌ๋˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
(โ—๋ฌด์กฐ๊ฑด 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;

03.Where์™€ Group by, Order by ํ•จ๊ป˜ ์‚ฌ์šฉ

โœ…์›๋ฆฌ๋Š” ๊ฐ„๋‹จ!
Where์ ˆ๋กœ ์กฐ๊ฑด์ด ํ•˜๋‚˜ ์ถ”๊ฐ€๋˜๊ณ , ๊ทธ ์ดํ›„์— Group by, Order by๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ!

ex) select payment_method, count(๋ณ„) from orders
where course_title = "์›น๊ฐœ๋ฐœ ์ข…ํ•ฉ๋ฐ˜"
group by payment_method;

04.Group by์™€ ํ•จ๊ป˜ ์“ธ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•

๋™์ผํ•œ ๋ฒ”์ฃผ์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
๋™์ผํ•œ ๋ฒ”์ฃผ์˜ ๊ฐฏ์ˆ˜๋Š” 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 ๋ฒ”์ฃผ๊ฐ€ ๋‹ด๊ธด ํ•„๋“œ๋ช…

05.์ด์™ธ ์œ ์šฉํ•œ ๋ฌธ๋ฒ•

๋ณ„์นญ ๊ธฐ๋Šฅ : 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

0๊ฐœ์˜ ๋Œ“๊ธ€