SQL

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค level 3] ๋Œ€์—ฌ ํšŸ์ˆ˜๊ฐ€ ๋งŽ์€ ์ž๋™์ฐจ๋“ค์˜ ์›”๋ณ„ ๋Œ€์—ฌ ํšŸ์ˆ˜ ๊ตฌํ•˜๊ธฐ

1eehyunji 2023. 7. 11. 02:54

๋ฌธ์ œ ์„ค๋ช…

๋‹ค์Œ์€ ์–ด๋А ์ž๋™์ฐจ ๋Œ€์—ฌ ํšŒ์‚ฌ์˜ ์ž๋™์ฐจ ๋Œ€์—ฌ ๊ธฐ๋ก ์ •๋ณด๋ฅผ ๋‹ด์€ CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ…Œ์ด๋ธ”์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์œผ๋ฉฐ, HISTORY_ID, CAR_ID, START_DATE, END_DATE ๋Š” ๊ฐ๊ฐ ์ž๋™์ฐจ ๋Œ€์—ฌ ๊ธฐ๋ก ID, ์ž๋™์ฐจ ID, ๋Œ€์—ฌ ์‹œ์ž‘์ผ, ๋Œ€์—ฌ ์ข…๋ฃŒ์ผ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Column nameTypeNullable

HISTORY_ID INTEGER FALSE
CAR_ID INTEGER FALSE
START_DATE DATE FALSE
END_DATE DATE FALSE

๋ฌธ์ œ

CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ…Œ์ด๋ธ”์—์„œ ๋Œ€์—ฌ ์‹œ์ž‘์ผ์„ ๊ธฐ์ค€์œผ๋กœ 2022๋…„ 8์›”๋ถ€ํ„ฐ 2022๋…„ 10์›”๊นŒ์ง€ ์ด ๋Œ€์—ฌ ํšŸ์ˆ˜๊ฐ€ 5ํšŒ ์ด์ƒ์ธ ์ž๋™์ฐจ๋“ค์— ๋Œ€ํ•ด์„œ ํ•ด๋‹น ๊ธฐ๊ฐ„ ๋™์•ˆ์˜ ์›”๋ณ„ ์ž๋™์ฐจ ID ๋ณ„ ์ด ๋Œ€์—ฌ ํšŸ์ˆ˜(์ปฌ๋Ÿผ๋ช…: RECORDS) ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ๊ฒฐ๊ณผ๋Š” ์›”์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜๊ณ , ์›”์ด ๊ฐ™๋‹ค๋ฉด ์ž๋™์ฐจ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”. ํŠน์ • ์›”์˜ ์ด ๋Œ€์—ฌ ํšŸ์ˆ˜๊ฐ€ 0์ธ ๊ฒฝ์šฐ์—๋Š” ๊ฒฐ๊ณผ์—์„œ ์ œ์™ธํ•ด์ฃผ์„ธ์š”.

 

๋ฌธ์ œํ’€์ด

SELECT MONTH(START_DATE) AS MONTH, CAR_ID, COUNT(*) AS RECORDS FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
AND CAR_ID IN 
(SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
WHERE START_DATE BETWEEN '2022-08-01' AND '2022-10-31'
GROUP BY CAR_ID
 HAVING COUNT(*)>=5
)
GROUP BY MONTH, CAR_ID
ORDER BY MONTH, CAR_ID DESC;

"๋Œ€์—ฌ ์‹œ์ž‘์ผ์„ ๊ธฐ์ค€์œผ๋กœ 2022๋…„ 8์›”๋ถ€ํ„ฐ 2022๋…„ 10์›”๊นŒ์ง€ ์ด ๋Œ€์—ฌ ํšŸ์ˆ˜๊ฐ€ 5ํšŒ ์ด์ƒ์ธ ์ž๋™์ฐจ๋“ค์— ๋Œ€ํ•ด์„œ"

์ด ๋ฌธ์žฅ์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ถ€ํ„ฐ ์‚ดํŽด๋ณด๋ฉด,

CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ…Œ์ด๋ธ”์—์„œ START_DATE๋ฅผ ๊ธฐ์ค€์œผ๋กœ 2022-08-01๊ณผ 2022-10-31 ์‚ฌ์ด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์„ ์ถ”์ถœํ•˜๊ณ ,

CAR_ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ GROUP BY๋ฅผ ๊ฑฐ์นœ ํ›„์— ๊ทธ๋ฃนํ™”๋œ ๋ฐ์ดํ„ฐ๋“ค์˜ ๊ฐฏ์ˆ˜๊ฐ€ 5๊ฐœ ์ด์ƒ์ธ CAR_ID๋“ค์„ ์ถ”์ถœํ–ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ , ์œ„์—์„œ ์„ค๋ช…ํ•œ ์„œ๋ธŒ์ฟผ๋ฆฌ์—์„œ ์ถ”์ถœํ•œ CAR_ID๋ฅผ ๋งŒ์กฑํ•˜๋ฉด์„œ, ๋Œ€์—ฌ ์‹œ์ž‘์ผ์‹œ๊ฐ€ 2022๋…„ 8์›”~2022๋…„ 10์›”์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•œ๋‹ค.

์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€์—ฌ ์‹œ์ž‘์ผ์‹œ์—์„œ ์›” ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœํ•œ MONTH ์ปฌ๋Ÿผ๊ณผ CAR_ID ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ GROUP BY ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ํ•ฉํ•˜๊ณ  ๊ทธ ํ•ฉ์„ ๊ธฐ์ค€์œผ๋กœ GROUP BY ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด ๊ฒฝ์šฐ๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด, MONTH์™€ CAR_ID๋ฅผ ํ•ฉ์ณ์„œ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, 8์›”์— CAR_ID๊ฐ€ 12์ธ ๋ฐ์ดํ„ฐ, 10์›”์— CAR_ID๊ฐ€ 8์ธ ๋ฐ์ดํ„ฐ,..

์ด๋Ÿฐ ์‹์œผ๋กœ ๊ทธ๋ฃนํ™”๋œ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ORDER BY๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌธ์ œ๊ฐ€ ์š”๊ตฌํ•œ๋Œ€๋กœ ์ •๋ ฌํ•ด์„œ ์ถœ๋ ฅํ–ˆ๋‹ค. 

 

์—ฌ๊ธฐ์„œ "YYYY-MM-DD" ํ˜•์‹์˜ DATE์—์„œ ๋…„๋งŒ ์ถ”์ถœํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—” YEAR(DATE), ์›”๋งŒ ์ถ”์ถœํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—” MONTH(DATE), ์ผ๋งŒ ์ถ”์ถœํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—” DAY(DATE)๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค!