๐Ÿงฑ SQL/๐Ÿ’ป ์ฟผ๋ฆฌ ํ…Œ์ŠคํŠธ

240102 TUE ๋Œ€์—ฌ ํšŸ์ˆ˜๊ฐ€ ๋งŽ์€ ์ž๋™์ฐจ๋“ค์˜ ์›”๋ณ„ ๋Œ€์—ฌ ํšŸ์ˆ˜ ๊ตฌํ•˜๊ธฐ

ํ–‰ํŒฝ 2024. 1. 2. 21:47

 

 

๋Œ€์—ฌ ํšŸ์ˆ˜๊ฐ€ ๋งŽ์€ ์ž๋™์ฐจ๋“ค์˜ ์›”๋ณ„ ๋Œ€์—ฌ ํšŸ์ˆ˜ ๊ตฌํ•˜๊ธฐ

 

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

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

programmers.co.kr

#์ตœ์ข…
SELECT MONTH(START_DATE), CAR_ID, COUNT(CAR_ID) RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID IN (
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE YEAR(START_DATE)=2022 AND MONTH(START_DATE) IN (8, 9, 10)
    GROUP BY CAR_ID
    HAVING COUNT(CAR_ID) >= 5
    )
    AND YEAR(START_DATE)=2022 AND MONTH(START_DATE) IN (8, 9, 10)
GROUP BY 1, 2
HAVING COUNT(CAR_ID) >= 1
ORDER BY 1 ASC, 2 DESC

 

์ •๋ง… ๊ณจ๋จธ๋ฆฌ๋ฅผ ์•“์•˜๋˜ ๋ฌธ์ œ๋‹ค. ๋‚œ์ด๋„๊ฐ€ ์ž๊พธ์ž๊พธ ์˜ฌ๋ผ๊ฐ„๋‹ค.

 


 

#์ ‘๊ทผ ๋ฐฉ์‹

 

โ‘  ๋Œ€์—ฌ ์‹œ์ž‘์ผ ๊ธฐ์ค€, 2022๋…„ 8~10์›” ๋‚ด, ์ด ๋Œ€์—ฌ ํšŸ์ˆ˜๊ฐ€ 5ํšŒ ์ด์ƒ์ธ ์ž๋™์ฐจ

→ WHERE ์ ˆ๋กœ ๊ธฐ๊ฐ„ ํ•„ํ„ฐ๋ง, ์ง‘๊ณ„ ํ•จ์ˆ˜ ์‚ฌ์šฉ, GROUP BY๋กœ ๋ฌถ๊ณ  HAVING์œผ๋กœ ์ด ๋Œ€์—ฌ ํšŸ์ˆ˜ ํ•„ํ„ฐ๋ง (1)

 

โ‘ก ๋™ ๊ธฐ๊ฐ„, ์›”๋ณ„, ์ž๋™์ฐจ ID ๋ณ„, ์ด ๋Œ€์—ฌ ํšŸ์ˆ˜ (์ปฌ๋Ÿผ๋ช… RECORDS)

→ GROUP BY๋กœ ์›”๊ณผ ์ž๋™์ฐจ ID ๋ฌต๊ธฐ, ์ด ๋Œ€์—ฌ ํšŸ์ˆ˜๋Š” SUM ํ˜น์€ COUNT๋กœ ๋„์ถœํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ

 

โ‘ข ์ •๋ ฌ - ์›” ๊ธฐ์ค€ ์˜ค๋ฆ„์ฐจ์ˆœ, ์ž๋™์ฐจ ID ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ

→ ORDER BY ์›” asc, ์ž๋™์ฐจ ID desc

 

โ‘ฃ ํŠน์ • ์›”์˜ ์ด ๋Œ€์—ฌ ํšŸ์ˆ˜๊ฐ€ 0์ธ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ์—์„œ ์ œ์™ธ

→ HAVING์œผ๋กœ ์ด ๋Œ€์—ฌ ํšŸ์ˆ˜ ํ•„ํ„ฐ๋ง (2)

 

 

#1๋‹จ๊ณ„

#1๋‹จ๊ณ„
SELECT MONTH(START_DATE), CAR_ID, COUNT(CAR_ID) RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE YEAR(START_DATE)=2022 AND MONTH(START_DATE) IN (8, 9, 10)
GROUP BY 1, 2
HAVING COUNT(CAR_ID) >= 5
ORDER BY 1 ASC, 2 DESC

-- 'ํŠน์ • ์›”์˜ ์ด ๋Œ€์—ฌ ํšŸ์ˆ˜'..??

 

์ฟผ๋ฆฌ๋ฅผ ๋‹ค ์ง  ๊ฑด ์•„๋‹ˆ์ง€๋งŒ ์ค‘๊ฐ„ ํ™•์ธ ์ฐจ ์ฝ”๋“œ ์‹คํ–‰์„ ๋ˆŒ๋ €๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ž๋งˆ์ž ๋ญ”๊ฐ€ ์Ž„ํ–ˆ๋‹ค. ์™œ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ 5์™€ 6 ๊ฐ’๋งŒ ์žˆ๋Š” RECORDS... CAR_ID๋Š” ์ค‘๋ณต๋˜๋Š” ๊ฒŒ ์™œ ์ด๋ ‡๊ฒŒ ๋งŽ์ด ์—†์ง€? ๊ฐ€๋ น ID 1๋ฒˆ์ธ ์ฐจ๊ฐ€ 8์›”์— 1๋ฒˆ, 9์›”์— 2๋ฒˆ, 10์›”์— 2๋ฒˆ์ด๋ผ๋ฉด ๊ฐ๊ฐ ๋‚˜์™€์•ผ ํ•˜๋Š”๋ฐ ์–ด์ฉ์ง€ ํ‰์ณ์ ธ์„œ, ๋ญ‰์ณ์ ธ์„œ ๋‚˜์˜จ ๋“ฏํ•œ ์ฐ์ฐํ•œ ๊ฒฐ๊ณผ. 

 

์—ฌ๊ธฐ์„œ ๊ฐ„๊ณผํ•œ ๊ฒŒ, COUNT(CAR_ID) >= 5 ์ธ ์ž๋™์ฐจ๋ฅผ ๋„์ถœํ•˜๊ณ , ๊ทธ ๋‹ค์Œ์— ํ•ด๋‹น ์ž๋™์ฐจ๋“ค์˜ ๊ฐ ์›”๋ณ„ ๋Œ€์—ฌํšŸ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค(์„ ํ›„๊ฐ€ ๋ช…ํ™•ํ•˜๋‹ค). ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค…

 

 

#2๋‹จ๊ณ„ (์ตœ์ข…)

#2๋‹จ๊ณ„ (์ตœ์ข…)
SELECT MONTH(START_DATE) MONTH, CAR_ID, COUNT(CAR_ID) RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE CAR_ID IN (
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE YEAR(START_DATE)=2022 AND MONTH(START_DATE) IN (8, 9, 10)
    GROUP BY CAR_ID
    HAVING COUNT(CAR_ID) >= 5
    )
    AND YEAR(START_DATE)=2022 AND MONTH(START_DATE) IN (8, 9, 10)
GROUP BY 1, 2
HAVING COUNT(CAR_ID) >= 1
ORDER BY 1 ASC, 2 DESC

 

[#์ ‘๊ทผ ๋ฐฉ์‹ โ‘  ๋Œ€์—ฌ ์‹œ์ž‘์ผ ๊ธฐ์ค€, 2022๋…„ 8~10์›” ๋‚ด, ์ด ๋Œ€์—ฌ ํšŸ์ˆ˜๊ฐ€ 5ํšŒ ์ด์ƒ์ธ ์ž๋™์ฐจ]๋ฅผ WHERE ์ ˆ์— ์„œ๋ธŒ ์ฟผ๋ฆฌ๋กœ ๋„ฃ๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ๋‹ค์‹œ HAVING๊ณผ ํ•จ๊ป˜ COUNT(CAR_ID) >= 1 ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ •๋‹ต.

 

 

#๋А๋‚€์ 

๊ธ€๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ์–ด์„œ ๊ทธ๋ ‡์ง€, 1๋‹จ๊ณ„์—์„œ 2๋‹จ๊ณ„(์ตœ์ข…)๋กœ ์ƒ๊ฐ์ด ํ๋ฅด๊ธฐ๊นŒ์ง€ 3์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค. ๋ญ”๊ฐ€ ์ฐ์ฐํ•˜๊ณ , ์–ด๋”˜๊ฐ€ ํ‹€๋ฆฐ ๊ฑด ํ™•์‹คํ•œ๋ฐ, ์™œ ํ‹€๋ ธ์ง€? ์–ด๋””๋ฅผ ์† ๋ด์•ผ ํ•˜์ง€… ๋ฅผ ๊ณ ๋ฏผํ•˜๋ฉฐ raw data์™€ 1๋‹จ๊ณ„๋กœ ์ž‘์„ฑํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋…ธ๋ ค๋ดค๋‹ค.

 

์‚ฌ์‹ค ๋‚˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ ์“ฐ๋Š” ๊ฑธ ๋ง์„ค์ด๋Š” ํŽธ์ด๋‹ค. ์ฝ”ํ…Œ ์—ฐ์Šต์—์„œ๋Š” ๋‹น์—ฐํžˆ ๋ฌธ์ œ ์—†๊ฒ ์ง€๋งŒ, ๋งŒ์•ฝ ์‹ค๋ฌด์— ๋˜์ ธ์กŒ์„ ๋•Œ ๊ทธ ํšŒ์‚ฌ์˜ DB๊ฐ€ ์–ด๋งˆ์–ด๋งˆํ•˜๋‹ค๋ฉด…? DBMS ์„ฑ๋Šฅ์ด ์ข‹๋‹ค๋ฉด ๊ดœ์ฐฎ์„ ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ง ์ •๋ง ๋งŽ๊ณ  ํฌ๋‹ค๋ฉด? ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์–ด์จŒ๋“  ํ…Œ์ด๋ธ”์„ 2+๋ฒˆ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฑด๋ฐ ์—„์ฒญ ๋น„ํšจ์œจ์ ์ธ ์ฟผ๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š์„๊นŒ…? ๋ผ๋Š” ๋ถˆ์•ˆํ•จ์ด ์žˆ๋‹ค.

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”ํ…Œ ์—ฐ์Šต์—๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์จ์•ผ๋งŒ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋‹น์—ฐํžˆ ์žˆ๋‹ค. ์•„์ง์€ ์‹ค๋ฌด๊ฐ€ ์•„๋‹Œ '์—ฐ์Šต'์ด๋‹ˆ๊นŒ, ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ (์ผ์ข…์˜) ๋ฌด์„œ์›Œํ•˜๋Š” ๊ฒƒ๋„ ์ข€ ๊ฐœ์„ ํ•ด์•ผ ๋˜๊ฒ ๋‹ค.