๐Ÿ’ SQL/Join

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค][SQL] ์ž…์–‘ ์‹œ๊ฐ ๊ตฌํ•˜๊ธฐ(2)

์„ ๋‹ฌ 2023. 7. 19. 20:26
๋ฐ˜์‘ํ˜•

https://school.programmers.co.kr/learn/courses/30/lessons/59413

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

 

0์‹œ๋ถ€ํ„ฐ 23์‹œ๊นŒ์ง€, ๊ฐ ์‹œ๊ฐ„๋Œ€๋ณ„๋กœ ์ž…์–‘์ด ๋ช‡ ๊ฑด์ด๋‚˜ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. 

์ด๋•Œ ๊ฒฐ๊ณผ๋Š” ์‹œ๊ฐ„๋Œ€ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

with recursive timetable as (
    select 0 as hour
    union all
    select hour+1 from timetable
    where hour<23
)

select t.hour as hour, count(o.animal_id) as count
from animal_outs o right join timetable t on hour(o.datetime) = t.hour
group by t.hour
order by hour

 

์ฒ˜์Œ์—๋Š” group by ํ•ด๋†“๊ณ  ์™œ ํ‹€๋ฆฐ๊ฑด์ง€ ์˜์•„ํ•ด์„œ ํ•œ์ฐธ ๋ดค๋‹ค

์•Œ๊ณ ๋ณด๋‹ˆ ๋ฐ์ดํ„ฐ์— ์—†๋Š” ์‹œ๊ฐ„๋Œ€ (์˜ˆ์‹œ ๋ฐ์ดํ„ฐ์—์„œ๋Š” 6์‹œ ๋“ฑ..)๋„ ๋ณด์—ฌ์ค˜์•ผํ•˜๋Š” ์ƒํ™ฉ

 

with๋ฅผ ์ด์šฉํ•œ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์˜€๋‹ค

recursive๋ฅผ ์ด์šฉํ•˜์—ฌ 0๋ถ€ํ„ฐ 24๊นŒ์ง€๋ฅผ hour ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๋Š” timetable ์„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๊ณ 

์ด๋ฅผ outer join (์—ฌ๊ธฐ์„  right join)์„ ํ™œ์šฉํ•˜์—ฌ ๊ฒฐํ•ฉ์‹œ์ผœ์ฃผ์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‹œ๊ฐ„๋”ฐ๋ผ group by ํ•ด์„œ count ํ•ด์ฃผ๋ฉด ๋

 

order by๋Š” ์•ˆํ•ด์ค˜๋„ ๋ฌด๋ฐฉํ•˜๊ธด ํ•˜๋‹ค

๋ฐ˜์‘ํ˜•