ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/SQL

[์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ] ๐Ÿ›ข์—‘์…€๋ณด๋‹ค ์‰ฌ์šด SQL - 2์ฃผ์ฐจ

ใ‚ใกใ‚ƒใใกใ‚ƒ ้–‹็™บ่€…๐Ÿฆพ 2022. 6. 5. 20:32

ใ€Š ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ SQL โ€•1์ฃผ์ฐจโ€• ใ€‹


[ SQL์—์„œ ์ฟผ๋ฆฌ๋ฌธ์˜ ์‹คํ–‰ ์ˆœ์„œ ]

 

1. FROM table

2. WHERE selectcriteria

3. GROUP  BY groupfieldlist

4. SELECT fieldlist

5. HAVING groupcriteria

5. ORDER BY field

์ถœ์ฒ˜ : https://wikidocs.net/133046

 

 

[ GROUP BY ์ ˆ๊ณผ ORDER BY ์ ˆ ]

์ฟผ๋ฆฌ๋ฌธ ๊ตฌ์„ฑ ์š”์†Œ ๊ธฐ๋Šฅ
GROUP BY groupfieldlist
- ํ•„๋“œ ์ด๋ฆ„ ๋ณ„์นญ, SQL ์ง‘๊ณ„ ํ•จ์ˆ˜, ์„ ํƒ ์กฐ๊ฑด์ž,

  ๊ธฐํƒ€ SELECT ๋ฌธ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•  ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•„๋“œ ์ด๋ฆ„
์ง€์ •ํ•œ ํ•„๋“œ ๋ชฉ๋ก์˜ ๊ฐ’์ด ๋™์ผํ•œ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋‹จ์ผ ๋ ˆ์ฝ”๋“œ๋กœ ๊ฒฐํ•ฉ
(๋™์ผํ•œ ๋ฒ”์ฃผ๋ฅผ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”
ํ•˜์—ฌ ๋ฒ”์ฃผ๋ณ„ ํ†ต๊ณ„ ๋„์ถœ)
ORDER BY field1 [ASC | DESC ][, field2 [ASC | DESC ]][, ...]]
- ๋ ˆ์ฝ”๋“œ๋ฅผ ์ •๋ ฌํ•  ํ•„๋“œ์˜ ์ด๋ฆ„
์ง€์ •๋œ ํ•„๋“œ์˜ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๋ ˆ์ฝ”๋“œ๋ฅผ
์˜ค๋ฆ„์ฐจ์ˆœ ๋˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
[๊ธฐ๋ณธ๊ฐ’ : ์˜ค๋ฆ„์ฐจ์ˆœ]

 

 

 

[ GROUP BY ์ฟผ๋ฆฌ๋ฌธ ์˜ˆ์ œ ]

 

โ‘  ์œ ์ € ์ •๋ณด ํ…Œ์ด๋ธ”์—์„œ ๊ฐ ์„ฑ์”จ๋ณ„ ํ†ต๊ณ„ ๊ตฌํ•˜๊ธฐ

select name, count(*) from users
group by name

 

 

โ‘ก ์ฃผ์ฐจ๋ณ„ '์˜ค๋Š˜์˜ ๋‹ค์ง' ์ข‹์•„์š”์˜ ํ†ต๊ณ„ ๊ตฌํ•˜๊ธฐ - 1

# ์ฃผ์ฐจ๋ณ„ '์˜ค๋Š˜์˜ ๋‹ค์ง' ์ข‹์•„์š”์˜ ์ตœ์†Ÿ๊ฐ’ ๊ตฌํ•˜๊ธฐ : min() ํ•จ์ˆ˜ ์‚ฌ์šฉ
select week, min(likes) from checkins
group by week

# ์ฃผ์ฐจ๋ณ„ '์˜ค๋Š˜์˜ ๋‹ค์ง' ์ข‹์•„์š”์˜ ์ตœ๋Œ€๊ฐ’ ๊ตฌํ•˜๊ธฐ : max() ํ•จ์ˆ˜ ์‚ฌ์šฉ
select week, max(likes) from checkins
group by week

(์ขŒ) '์˜ค๋Š˜์˜ ๋‹ค์ง' ์ข‹์•„์š”์˜ ์ตœ์†Ÿ๊ฐ’      (์šฐ) '์˜ค๋Š˜์˜ ๋‹ค์ง' ์ข‹์•„์š”์˜ ์ตœ๋Œ€๊ฐ’

 

 

โ‘ข ์ฃผ์ฐจ๋ณ„ '์˜ค๋Š˜์˜ ๋‹ค์ง' ์ข‹์•„์š”์˜ ํ†ต๊ณ„ ๊ตฌํ•˜๊ธฐ - 2

# ์ฃผ์ฐจ๋ณ„ '์˜ค๋Š˜์˜ ๋‹ค์ง' ์ข‹์•„์š”์˜ ํ‰๊ท ๊ฐ’ ๊ตฌํ•˜๊ธฐ : avg(), round()
select week, round(avg(likes), 2) from checkins
group by week 

# ์ฃผ์ฐจ๋ณ„ '์˜ค๋Š˜์˜ ๋‹ค์ง' ์ข‹์•„์š”์˜ ํ•ฉ๊ณ„ ๊ตฌํ•˜๊ธฐ : sum()
select week, sum(likes) from checkins
group by week

(์ขŒ) '์˜ค๋Š˜์˜ ๋‹ค์ง' ์ข‹์•„์š”์˜ ํ‰๊ท ๊ฐ’     (์šฐ) '์˜ค๋Š˜์˜ ๋‹ค์ง' ์ข‹์•„์š”์˜ ํ•ฉ๊ณ„

 

 

 

 

[ ORDER BY ์ฟผ๋ฆฌ๋ฌธ ์˜ˆ์ œ ]

 

โ‘  ์œ ์ € ์ •๋ณด ํ…Œ์ด๋ธ”์—์„œ ๊ฐ ์„ฑ์”จ๋ณ„ ํ†ต๊ณ„ ํ™•์ธ(๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ)

# ์ •๋ ฌ ํ•˜๊ณ ์ž ํ•  ๋•Œ order by ๋ฌธ์„ ์‚ฌ์šฉ ํ•œ๋‹ค! 
# [default: ์˜ค๋ฆ„์ฐจ์ˆœ] desc ๊ตฌ๋ฌธ ์ถ”๊ฐ€์‹œ ๋‚ด๋ฆผ์ฐจ์ˆœ 
select name, count(*) from users
group by name 
order by count(*) desc

 

 

โ‘ก ์ฃผ๋ฌธ์ž ์ •๋ณด ํ…Œ์ด๋ธ”์—์„œ ์•ฑ๊ฐœ๋ฐœ ์ข…ํ•ฉ๋ฐ˜์˜ ๊ฒฐ์ œ์ˆ˜๋‹จ๋ณ„ ์ฃผ๋ฌธ๊ฑด์ˆ˜ ์„ธ์–ด๋ณด๊ธฐ

select payment_method, count(*) from orders
where course_title = '์•ฑ๊ฐœ๋ฐœ ์ข…ํ•ฉ๋ฐ˜'
group by payment_method
order by count(*)

๊ธฐ๋ณธ ์ •๋ ฌ [์˜ค๋ฆ„์ฐจ์ˆœ]

 

 

โ‘ข ์œ ์ € ์ •๋ณด ํ…Œ์ด๋ธ”์—์„œ Gmail์„ ์‚ฌ์šฉํ•˜๋Š” ์„ฑ์”จ๋ณ„ ํšŒ์› ์ˆ˜ ์„ธ์–ด๋ณด๊ธฐ

select name, count(*) from users
where email like '%gmail.com'
group by name
order by count(*) desc

 

 

โ‘ฃ checkins ํ…Œ์ด๋ธ”์—์„œ course_id ๋ณ„ '์˜ค๋Š˜์˜ ๋‹ค์ง'์— ๋‹ฌ๋ฆฐ ํ‰๊ท  like ๊ฐฏ์ˆ˜ ๊ตฌํ•˜๊ธฐ

select course_id, round(avg(likes), 1) from checkins
group by course_id

 

 

 

 

[ SQL ์—์„œ์˜ ALIAS(๋ณ„์นญ) ์‚ฌ์šฉ๋ฒ• ]

  • ๋™์ผํ•œ ํ•„๋“œ๋ช…์„ ๊ฐ€์ง„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒฝ์šฐ ํ•„๋“œ ์†Œ์œ ์ž๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์•„ SQL๋ฌธ ์ž์ฒด์— ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • Ex) orders ํ…Œ์ด๋ธ”์˜ 'created_at' ํ•„๋“œ์™€ users ํ…Œ์ด๋ธ”์˜ 'created_at' ํ•„๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌ๋ฌธ์œผ๋กœ ํ•จ๊ป˜ ์ž‘์„ฑ ์‹œ ๋™์ผํ•œ ํ•„๋“œ๋ช…์˜ ๋ฐ์ดํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋™ / SQL๋ฌธ ์ž์ฒด์— ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ํ•„๋“œ์˜ ์†Œ์œ ์ฃผ๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ณ„์นญ(ALIAS) ์‚ฌ์šฉ

 [ ํ˜•์‹ ]

# ALIAS ์‚ฌ์šฉ ํ˜•์‹ 1
SELECT ๋ณ„์นญ.ํ•„๋“œ , ๋ณ„์นญ.ํ•„๋“œ2, ๋ณ„์นญ.ํ•„๋“œ3
FROM ํ…Œ์ด๋ธ” AS ๋ณ„์นญ

# ALIAS ์‚ฌ์šฉ ํ˜•์‹ 2 
SELECT ๋ณ„์นญ.ํ•„๋“œ , ๋ณ„์นญ.ํ•„๋“œ2, ๋ณ„์นญ.ํ•„๋“œ3
FROM ํ…Œ์ด๋ธ” ๋ณ„์นญ  # AS๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ง€์ •ํ•˜์ง€๋งŒ ์ƒ๋žตํ•˜๊ณ  ๋„์–ด์“ฐ๊ธฐ๋งŒ์œผ๋กœ๋„ ์ง€์ • ๊ฐ€๋Šฅ

 

โ‘  Alias ์‚ฌ์šฉ ์˜ˆ์ œ - 1

select o.payment_method, count(*) as 'ํ‰๊ท ' 
from orders o
where o.course_title = '์•ฑ๊ฐœ๋ฐœ ์ข…ํ•ฉ๋ฐ˜'
group by o.payment_method

count(*) ์ปฌ๋Ÿผ๋ช…์ด ๋ณ„์นญ์ธ ํ‰๊ท ์œผ๋กœ ๋ฐ”๋€ ๊ฒƒ์„ ํ™•์ธ

 

 

โ‘ก Alias ์‚ฌ์šฉ ์˜ˆ์ œ - 2

# ๋„ค์ด๋ฒ„ ์ด๋ฉ”์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ๊ฐœ๋ฐœ ์ข…ํ•ฉ๋ฐ˜์„ ์‹ ์ฒญํ•œ ์ฃผ๋ฌธ์˜ ๊ฒฐ์ œ์ˆ˜๋‹จ๋ณ„ ์ฃผ๋ฌธ๊ฑด์ˆ˜ ์ถœ๋ ฅ
select o.course_title as ์ฝ”์Šค, o.payment_method, count(*) 
from orders o
where o.email like '%naver.com' and o.course_title = '์•ฑ๊ฐœ๋ฐœ ์ข…ํ•ฉ๋ฐ˜'
group by o.payment_method

 

 

[ ๐ŸŒ“ 2์ฃผ์ฐจ ์†Œ๊ฐ ]

๋ถ„๋ช… 2์ฃผ์ฐจ ๊ฐ•์˜ ๋‚ด์šฉ ๋˜ํ•œ ๊ธฐ์กด ํ•™๊ต ๊ต์œก๊ณผ์ •์—์„œ ๋ฐฐ์šด ๋ถ€๋ถ„์ด์ง€๋งŒ

๋‹น์—ฐํ•˜๊ฒŒ๋„ ์–•๊ณ  ๋„“๊ฒŒ ๋ฐฐ์šฐ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋…์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ

์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด๊ธฐ์— ๋งˆ์น˜ ์ฒ˜์Œ(?) ๋ฐฐ์šฐ๋Š” ๋А๋‚Œ์œผ๋กœ ๋‹ค์‹œ ๊ณต๋ถ€ํ•œ ๊ฒƒ ๊ฐ™๋‹คใ…‹ใ…‹ใ…‹

์•„์ง๊นŒ์ง€๋Š” ์ง„๋„ ์ดˆ๋ฐ˜์ด๋ผ ํฐ ์–ด๋ ค์›€ ์—†์ด ๋น„์ „๊ณต์ž๋„ ์ถฉ๋ถ„ํžˆ ๋”ฐ๋ผ์˜ฌ๋งŒํ•œ ์ˆ˜์—… ๋‚œ์ด๋„ ์ธ ๊ฒƒ ๊ฐ™๋‹ค!