SQL & Python Study

[D+2] ์—‘์…€๋ณด๋‹ค ์‰ฌ์šด SQL(2) - ์—ฐ์‚ฐ, ๋ฐ์ดํ„ฐ ์ •๋ ฌ, ๊ทธ๋ฃนํ™” (GROUP BY, ORDER BY) ๋ณธ๋ฌธ

๐Ÿ”ฅ SQL

[D+2] ์—‘์…€๋ณด๋‹ค ์‰ฌ์šด SQL(2) - ์—ฐ์‚ฐ, ๋ฐ์ดํ„ฐ ์ •๋ ฌ, ๊ทธ๋ฃนํ™” (GROUP BY, ORDER BY)

๊น€์ˆฎ์—‰ 2024. 4. 16. 17:29

์—‘์…€๋ณด๋‹ค ์‰ฌ์šด SQL 2์ฃผ์ฐจ ์Šคํ„ฐ๋”” ๋กœ๊ทธ ๊ธฐ๋ก ing

 

โœ๏ธ STUDY IDEX

1. SQL ์—ฐ์‚ฐ์‹ (SUM, AVERAGE, COUNT, MIN, MAX)
2. ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜์™€ ๊ฐ’ ๊ตฌํ•˜๊ธฐ (COUNT, DISTINCT) 
3. ๋ฒ”์ฃผ๋ณ„๋กœ ์—ฐ์‚ฐํ•˜๊ธฐ (GROUP BY) 
4. ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ •๋ ฌํ•˜๊ธฐ (ORDER BY)
5. SQL์˜ ๊ตฌ์กฐ (์ฟผ๋ฆฌ๋ฅผ ์งœ๊ธฐ ์ „์— ์–ด๋–ป๊ฒŒ ํ๋ฆ„์„ ์ •๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€) 

 

1. SQL ์—ฐ์‚ฐ์‹ (SUM, AVERAGE, COUNT, MIN, MAX)

์—‘์…€์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ˆซ์ž ์—ฐ์‚ฐ, SQL์—์„œ๋„ ๊ทธ๋Œ€๋กœ ๊ฐ€๋Šฅํ•˜๋”๋ผ๊ณ ์š”.  

์•„๋ž˜ ์—ฐ์‚ฐ ํ•จ์ˆ˜ ํ•ต์‹ฌ๋งŒ ํ‘œ๋กœ ๋”ฑ ์ •๋ฆฌํ•ด ๋“œ๋ ค์š”. 

๋‹น์—ฐํ•˜๊ฒŒ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž์ธ ๊ฒฝ์šฐ์—” ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ์  ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”. 

์—ฐ์‚ฐ์ž ํ˜น์€ ํ•จ์ˆ˜  ์˜๋ฏธ 
+ ๋”ํ•˜๊ธฐ
- ๋นผ๊ธฐ
* ๊ณฑํ•˜๊ธฐ 
/ ๋‚˜๋ˆ„๊ธฐ 
SUM(์ปฌ๋Ÿผ) ํ•ฉ๊ณ„ 
AVG(์ปฌ๋Ÿผ) ํ‰๊ท  
MAX(์ปฌ๋Ÿผ)  ์ตœ๋Œ“๊ฐ’ ๊ตฌํ•˜๊ธฐ 
MIN(์ปฌ๋Ÿผ)  ์ตœ์†Ÿ๊ฐ’ ๊ตฌํ•˜๊ธฐ 

 

2. ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜์™€ ๊ฐ’ ๊ตฌํ•˜๊ธฐ (COUNT, DISTINCT) 

ํ˜„์žฌ ํ…Œ์ด๋ธ”์ด ๋ช‡ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ์™€ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”. 

์‹ ๊ธฐํ•œ ๊ฒƒ์€ ๋ฐ์ดํ„ฐ์™€ ๊ฐ’์„ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ๋ถ„ํ•œ๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ์š”. 

 

๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๋Š” ๋ง ๊ทธ๋Œ€๋กœ ํ…Œ์ด๋ธ”์— ๋ช‡ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€(์ค‘๋ณต ๊ณ„์‚ฐX) ์ด๊ณ , 

๊ฐ’์˜ ๊ฐฏ์ˆ˜๋Š” ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฃจ๋Š” ๊ฐ’์„ ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ด์—์š”. 

์‚ฌ์‹ค ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋‚ด์šฉ์ผ ์ˆ˜ ๋„ ์žˆ์ง€๋งŒ, ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ํ—ท๊ฐˆ๋ ค์„œ ์ž‘์„ฑํ•ด ๋ดค์–ด์š”!

 

ex) ๋ฐ์ดํ„ฐ์™€ ๊ฐ’์˜ ์ฐจ์ด ์ดํ•ดํ•˜๊ธฐ 

  • ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ : ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”์˜ ์ „์ฒด ์ฃผ๋ฌธ์˜ ๊ฑด์ˆ˜ COUNT ( ์นผ๋Ÿผ) 
  • ๊ฐ’์˜ ๊ฐœ์ˆ˜ : ์ฃผ๋ฌธ์„ ํ•œ ๊ณ ๊ฐ์€ ๋ช‡ ๋ช…์ธ์ง€ COUNT ( DISTINCT ์ปฌ๋Ÿผ) 
    *DISTINCT๋Š” ์ค‘๋ณต๋œ ๊ฐ’์„ ์ œ๊ฑฐํ•˜๊ณ  ๊ณ ์œ ํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ผ๊ณ  ํ•ด์š”! 
# ์ฃผ๋ฌธ ๊ฑด์ˆ˜์™€ ์ฃผ๋ฌธํ•œ ๊ณ ๊ฐ์˜ ์ˆ˜ ๊ตฌํ•˜๊ธฐ 
select count(1) as '์ฃผ๋ฌธ ์ˆ˜'
	count(distinct customer_id) as '๊ณ ๊ฐ ์ˆ˜'
from food_orders

 

3. ๋ฒ”์ฃผ๋ณ„๋กœ ์—ฐ์‚ฐํ•˜๊ธฐ (GROUP BY)

์›ํ•˜๋Š” ๋‹จ์œ„, ์ฆ‰ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ํ•œ ๋ฒˆ์— ์—ฐ์‚ฐํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด group by์ž…๋‹ˆ๋‹ค. 

 

์•„๋ž˜ ๋‚ด์šฉ์„ where ์ ˆ๋กœ ํ•˜๋‚˜์”ฉ ํ‰๊ท ์„ ๊ณ„์‚ฐํ•œ๋‹ค๋ฉด ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ฒ ์ฃ ?

์ „ ์•„์ง ์ดˆ์งœ๋ผ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€๋„ ์‚ฌ์‹ค ๋ชจ๋ฅด๊ฒ ์–ด์š”. ์‹œ๋„ํ•ด๋ณด๋ ค๊ณ  ํ•˜๋‹ค๊ฐ€ SQL์ด ํž˜๊ฒจ์›Œ์งˆ๊นŒ ํ๋ฆฐ ๋ˆˆ๐Ÿ™„ ํ–ˆ๋‹ต๋‹ˆ๋‹ค. 

group by๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ์–ด ์ •๋ง ๋‹คํ–‰์ž…๋‹ˆ๋‹ค. ์ ˆ๋Œ€ ์žŠ์ง€ ์•Š๊ฒ ์–ด์š”. 

# ๋ ˆ์Šคํ† ๋ž‘ ๋ณ„ ํ‰๊ท  ์ฃผ๋ฌธ ๊ฐ€๊ฒฉ ๊ตฌํ•˜๊ธฐ 
SELECT restaurant_name as "์Œ์‹์ ๋ช…" , 
	avg(price) "ํ‰๊ท  ์ฃผ๋ฌธ ๊ฐ€๊ฒฉ"
FROM food_orders 
group by restaurant_name

 

์ถ”๊ฐ€๋กœ, ์žฌ๋ฏธ์žˆ๋˜ ์˜ˆ์‹œ๋„ ๊ฐ€์ ธ์™€๋ดค์–ด์š”. 

๊ฒฐ์ œ ํƒ€์ž… ๋ณ„ ๊ฐ€์žฅ ์ตœ๊ทผ ๊ฒฐ์ œ์ผ์„ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์ธ๋ฐ ์ตœ๊ทผ ๊ฒฐ์ œ์ผ์„ max(date)๋ผ๊ณ  ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋”๋ผ๊ณ ์š”! 

์•„์ง ๋ฌธ๊ณผ ๋จธ๋ฆฌ์ธ ์ œ๊ฒŒ๋Š” max(date) ๋ผ๋Š” ํ‘œํ˜„์ด ๋„ˆ๋ฌด ์‹ ๋ฐ•ํ•ด์„œ ์†Œ์†Œํ•˜์ง€๋งŒ ๋“ค๊ณ  ์™”์Šต๋‹ˆ๋‹ค ใ…‹ใ…‹  

#๊ฒฐ์ œ ํƒ€์ž…๋ณ„ ๊ฐ€์žฅ ์ตœ๊ทผ ๊ฒฐ์ œ์ผ ์กฐํšŒํ•˜๊ธฐ 
SELECT pay_type , 
	max(date) '์ตœ๊ทผ ๊ฒฐ์ œ์ผ'
FROM payments 
GROUP BY pay_type

 

4. ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ •๋ ฌํ•˜๊ธฐ (ORDER BY)

๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ƒฅ ๊ทธ๋Œ€๋กœ ์ถ”์ถœํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๊ฐ€๊ณตํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒ ์ฃ . 

๊ฒฐ๊ณผ ๊ฐ’์„ ์˜ค๋ฆ„์ฐจ์ˆœ ํ˜น์€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ order by ์ž…๋‹ˆ๋‹ค. 

์ข…๋ฅ˜ ๊ตฌ๋ฌธ ์˜ˆ์‹œ
์˜ค๋ฆ„์ฐจ์ˆœ ์ƒ๋žต ๋˜๋Š” asc order by ์ปฌ๋Ÿผ๋ช… 
๋‚ด๋ฆผ์ฐจ์ˆœ desc order by ์ปฌ๋Ÿผ๋ช… desc 

 

5. SQL์˜ ๊ตฌ์กฐ (์ฟผ๋ฆฌ๋ฅผ ์งœ๊ธฐ ์ „์— ์–ด๋–ป๊ฒŒ ํ๋ฆ„์„ ์ •๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€)

๋งˆ์ง€๋ง‰์œผ๋กœ 1, 2ํŽธ์—์„œ ๊ณต๋ถ€ํ–ˆ๋˜ SQL์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ผˆ๋Œ€ ๊ตฌ์กฐ๋ผ์„œ ์ œ๋Œ€๋กœ ์•Œ๊ณ  ๊ฐ€๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

์‹ค์Šต ํ’€์ด๋„ ๋ชจ๋‘ ์ด ์ˆœ์„œ๋Œ€๋กœ ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ, ์–ด๋–ค ์ˆ˜์‹์„ ์กฐํšŒํ•˜๋Š”์ง€ ์ •๋ฆฌ ๋จผ์ € ํ•˜๋ฉด์„œ ์ง„ํ–‰๋˜๊ฑฐ๋“ ์š”! 

select 
from 
where 
group by 
order by

 

์˜ค๋Š˜์˜ ๊ณต๋ถ€๋Š” ์—ฌ๊ธฐ๊นŒ์ง€์ž…๋‹ˆ๋‹ค. 

 

์ œ๊ฐ€ ์˜ค๋Š˜ ์Šคํ„ฐ๋””๋ฅผ ํ•˜๋ฉด์„œ ์•Œ๊ฒŒ ๋œ ๊ฒƒ์€ ํŒ€ ๋‚ด์—์„œ ์ €์˜ ๊ฐ•์˜ ์ฃผ์ฐจ๊ฐ€ ์ œ์ผ ๋Šฆ๋‹ค๋Š” ๊ฑฐ์˜ˆ์š” ใ… ใ…  

๊ธฐ์ดˆ ๊ฐ•์˜ ๋ช‡ ๊ฐœ ์ˆ˜๊ฐ•ํ–ˆ๋‹ค๊ณ  ์žฌ๋ฏธ์žˆ๋‹ค๋ฉฐ ์•ˆ์ฃผํ•˜๊ธฐ๋ณด๋‹ค,

์ƒˆ๋กœ์šด ๋ถ„์•ผ์— ์ œ๋Œ€๋กœ ๊นŠ์ด ๋“ค์–ด๊ฐ€๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์„ ๊ฐ•ํ•˜๊ฒŒ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ˆ„๊ตฐ๊ฐ€ ๋ชจ๋ฅด๋Š” ๊ฒƒ์ด ์žˆ์„ ๋•Œ ์ œ๊ฐ€ ๊ฐ€๋ฅด์ณ์ค„ ์ˆ˜ ์žˆ๋„๋ก ์ด๋ฒˆ์ฃผ์— ์–ผ๋ฅธ ๊ธฐ์ดˆ ๊ฐ•์˜๋ฅผ ๋‹ค ๋–ผ์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

์ƒˆ๋กœ์šด ๊ฒƒ์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์„ค๋ ˆ๊ธฐ๋„ ํ•˜์ง€๋งŒ, ๋ฌด์–ธ๊ฐ€๋ฅผ ์ด๋ฃจ๊ณ  ์–ด๋–ค ๊ฒฝ์ง€์— ์˜ฌ๋ผ๊ฐ€๊ธฐ๋Š” ์‰ฝ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์•„์š”. 

ํ•˜์ง€๋งŒ, ๋ชฉํ‘œํ•œ ๋Œ€๋กœ ์ ˆ๋Œ€ ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ  ์—ด์‹ฌํžˆ ์ •์ง„ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. 

์ƒˆ๋กœ์šด ๋„์ „์„ ํ•˜์‹œ๋Š” ๋ชจ๋“  ๋ถ„๋“ค ์‘์›ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ€