๋์ฌ ํ์๊ฐ ๋ง์ ์๋์ฐจ๋ค์ ์๋ณ ๋์ฌ ํ์ ๊ตฌํ๊ธฐ
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
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+๋ฒ ๋ถ๋ฌ์ค๋ ๊ฑด๋ฐ ์์ฒญ ๋นํจ์จ์ ์ธ ์ฟผ๋ฆฌ๊ฐ ๋์ง ์์๊น…? ๋ผ๋ ๋ถ์ํจ์ด ์๋ค.
ํ๋ก๊ทธ๋๋จธ์ค ์ฝํ ์ฐ์ต์๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์จ์ผ๋ง ํ๋ ๋ฌธ์ ๊ฐ ๋น์ฐํ ์๋ค. ์์ง์ ์ค๋ฌด๊ฐ ์๋ '์ฐ์ต'์ด๋๊น, ์๋ธ์ฟผ๋ฆฌ๋ฅผ (์ผ์ข ์) ๋ฌด์์ํ๋ ๊ฒ๋ ์ข ๊ฐ์ ํด์ผ ๋๊ฒ ๋ค.
'๐งฑ SQL > ๐ป ์ฟผ๋ฆฌ ํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
solvesql ๋ฐฐ์ก ์์ ์ผ ์์ธก ์ฑ๊ณต๊ณผ ์คํจ - ๋ฌธ์ ํ์ด (0) | 2024.05.22 |
---|---|
231227 WED ์ฐ์ ์ ์๊ฑฐํธ๊ฐ ๋ด๊ธด ์ฅ๋ฐ๊ตฌ๋ (0) | 2023.12.27 |
231226 TUE ์ฝ๋์นดํ ๋ฆฌ๋ทฐ (1) | 2023.12.26 |
231224 SUN ์ง๊ณํจ์ (0) | 2023.12.24 |