๐Ÿ’ SQL/Group By

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค][SQL] ์ž๋™์ฐจ ๋Œ€์—ฌ ๊ธฐ๋ก์—์„œ ๋Œ€์—ฌ์ค‘ / ๋Œ€์—ฌ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ตฌ๋ถ„ํ•˜๊ธฐ

์„ ๋‹ฌ 2023. 5. 26. 23:56
๋ฐ˜์‘ํ˜•

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

 

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

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

programmers.co.kr

 

๋ฌธ์ œ

CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ…Œ์ด๋ธ”์—์„œ

2022๋…„ 10์›” 16์ผ์— ๋Œ€์—ฌ ์ค‘์ธ ์ž๋™์ฐจ์ธ ๊ฒฝ์šฐ '๋Œ€์—ฌ์ค‘' ์ด๋ผ๊ณ  ํ‘œ์‹œํ•˜๊ณ ,

1. ๋Œ€์—ฌ ์ค‘์ด์ง€ ์•Š์€ ์ž๋™์ฐจ์ธ ๊ฒฝ์šฐ '๋Œ€์—ฌ ๊ฐ€๋Šฅ'์„ ํ‘œ์‹œํ•˜๋Š” ์ปฌ๋Ÿผ (์ปฌ๋Ÿผ๋ช…: AVAILABILITY)์„ ์ถ”๊ฐ€ํ•˜์—ฌ

2. ์ž๋™์ฐจ ID์™€ AVAILABILITY ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ด๋•Œ ๋ฐ˜๋‚ฉ ๋‚ ์งœ๊ฐ€ 2022๋…„ 10์›” 16์ผ์ธ ๊ฒฝ์šฐ์—๋„ '๋Œ€์—ฌ์ค‘'์œผ๋กœ ํ‘œ์‹œํ•ด์ฃผ์‹œ๊ณ 

๊ฒฐ๊ณผ๋Š” ์ž๋™์ฐจ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

 

ํ’€์ด

์šฐ์„  ์ด ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ 1๋ฒˆ๊ณผ 2๋ฒˆ ์กฐ๊ฑด์ด ์ƒ๋‹นํžˆ ๊นŒ๋‹ค๋กœ์› ๋‹ค.

1๋ฒˆ์˜ ๊ฒฝ์šฐ case when์„ ์ด์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ AVAILABILITY์˜ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜๋ฉด ๋˜์—ˆ๋Š”๋ฐ,

์ด์ œ ์ด๊ฑธ CAR_ID ๋ณ„๋กœ group by ๋ฅผ ํ•ด์ค˜์•ผํ–ˆ๋‹ค.

 

ํ•œ ์ฐจ์— ๋Œ€ํ•˜์—ฌ ๋Œ€์—ฌ๊ธฐ๋ก์ด ์—ฌ๋Ÿฌ๊ฐœ ์žˆ์œผ๋ฉด '๋Œ€์—ฌ์ค‘' ๊ณผ '๋Œ€์—ฌ๊ฐ€๋Šฅ'์ด ๋‘˜๋‹ค ๋‚˜์˜ค๊ฒŒ ๋˜๋Š”๋ฐ,

ํ•œ CAR_ID๊ฐ€ ๋‘๊ฐ€์ง€ ์ƒํƒœ๋ฅผ ๋‹ค ๊ฐ€์ง„๋‹ค๋‹ค๋ฉด '๋Œ€์—ฌ์ค‘'์ด ๋œจ๋„๋ก ํ•ด์•ผํ–ˆ๋‹ค.

 

๋‚ด ํ’€์ด์˜ ๊ฒฝ์šฐ ๊ฐ„๊ฒฐํ•œ ํ’€์ด๋ฅผ ์œ„ํ•ด ๊ผผ์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ๋Š”๋ฐ, '๋Œ€์—ฌ์ค‘' ์ด '๋Œ€์—ฌ๊ฐ€๋Šฅ'๋ณด๋‹ค ๋ฌธ์ž์—ด์ด ๋” ํฌ๊ธฐ ๋•Œ๋ฌธ์—

group by ์ดํ›„ max๋ฅผ ์ด์šฉํ•˜์˜€๋‹ค

 

-- ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”
SELECT CAR_ID,
    max(case when '2022-10-16' between START_DATE and END_DATE 
    then '๋Œ€์—ฌ์ค‘' else '๋Œ€์—ฌ ๊ฐ€๋Šฅ' end) as AVAILABILITY
from CAR_RENTAL_COMPANY_RENTAL_HISTORY
group by CAR_ID
order by CAR_ID desc
๋ฐ˜์‘ํ˜•