๋ฌธ์
๐ MySQL ๋ก ํ์ด
๐ ๋ฌธ์ ๋งํฌ :
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ ๋ฌธ์ ์ค๋ช :
CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ ์ด๋ธ์์ ๋์ฌ ์์์ผ์ ๊ธฐ์ค์ผ๋ก 2022๋ 8์๋ถํฐ 2022๋ 10์๊น์ง ์ด ๋์ฌ ํ์๊ฐ 5ํ ์ด์์ธ ์๋์ฐจ๋ค์ ๋ํด์ ํด๋น ๊ธฐ๊ฐ ๋์์ ์๋ณ ์๋์ฐจ ID ๋ณ ์ด ๋์ฌ ํ์(์ปฌ๋ผ๋ช : RECORDS) ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ์์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๊ณ , ์์ด ๊ฐ๋ค๋ฉด ์๋์ฐจ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์. ํน์ ์์ ์ด ๋์ฌ ํ์๊ฐ 0์ธ ๊ฒฝ์ฐ์๋ ๊ฒฐ๊ณผ์์ ์ ์ธํด์ฃผ์ธ์.
๐ ํ ์ด๋ธ :
๋ค์์ ์ด๋ ์๋์ฐจ ๋์ฌ ํ์ฌ์ ์๋์ฐจ ๋์ฌ ๊ธฐ๋ก ์ ๋ณด๋ฅผ ๋ด์ CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ ์ด๋ธ์ ๋๋ค. CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ ์ด๋ธ์ ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด์์ผ๋ฉฐ, HISTORY_ID, CAR_ID, START_DATE, END_DATE ๋ ๊ฐ๊ฐ ์๋์ฐจ ๋์ฌ ๊ธฐ๋ก ID, ์๋์ฐจ ID, ๋์ฌ ์์์ผ, ๋์ฌ ์ข ๋ฃ์ผ์ ๋ํ๋ ๋๋ค.
HISTORY_ID | INTEGER | FALSE |
CAR_ID | INTEGER | FALSE |
START_DATE | DATE | FALSE |
END_DATE | DATE | FALSE |
ํ์ด
์ถ์ธก)
์์ฝํ ๋ ์ ์กฐ๊ฑด์ ๋ง๊ฒ ๋จผ์ ํํฐ๋งํด์ ROW์๋ฅผ ์ค์ด๊ณ ,
๊ทธ 3๊ฐ์ ์์ 5๋ฒ ์ด์์ธ CAR_ID๋ฅผ ์ง์ํ ํ์
๊ทธ CAR_ID ๋์์ผ๋ก ROW์๋ฅผ ์ค์ธ ๊ฒฐ๊ณผ์์ ํด๋น ๊ธฐ๊ฐ ๋์์ ๋ฌ๊ธฐ์ค, ์ฐจ๊ธฐ์ค์ผ๋ก GROUPํ ์์ผ ๊ทธ๋ฃน ํจ์ ์นด์ดํธ๋ก๋ฌ๋ง๋ค ๋ช๋ฒ ๋ ํธ๊ฐ ๋ฌ๋์ง ์ง์ํ๋ฉด ๋ ๋ฏํ๋ค.
์ฟผ๋ฆฌ)
* 1์ฐจ)
WITH F AS
(
SELECT HISTORY_ID, CAR_ID, MONTH(START_DATE) AS MONTH
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE,'%Y-%m-%d') BETWEEN '2022-08-01' AND '2022-10-31'
)
SELECT MONTH, CAR_ID, COUNT(CAR_ID) AS RECORDS
FROM F
WHERE CAR_ID IN (SELECT CAR_ID
FROM F
GROUP BY CAR_ID
HAVING COUNT(CAR_ID) >= 5)
GROUP BY MONTH, CAR_ID
ORDER BY MONTH ASC, CAR_ID DESC
* 2์ฐจ) ์๋ธ์ฟผ๋ฆฌ๋ฅผ JOIN์ผ๋ก ๊ต์ฒด
WITH F AS
(
SELECT HISTORY_ID, CAR_ID, MONTH(START_DATE) AS MONTH
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE,'%Y-%m-%d') BETWEEN '2022-08-01' AND '2022-10-31'
)
SELECT F.MONTH, F.CAR_ID, COUNT(F.CAR_ID) AS RECORDS
FROM F
INNER JOIN (SELECT CAR_ID
FROM F
GROUP BY CAR_ID
HAVING COUNT(CAR_ID) >= 5) AS A
ON F.CAR_ID = A.CAR_ID
GROUP BY F.MONTH, F.CAR_ID
ORDER BY F.MONTH ASC, F.CAR_ID DESC
๋ฆฌ๋ทฐ)
ํ๋ค ๋ณด๋ "2022๋ 8์๋ถํฐ 2022๋ 10์๊น์ง ์ด ๋์ฌ ํ์๊ฐ 5ํ ์ด์์ธ ์๋์ฐจ๋ค์ ๋ํด์ ํด๋น ๊ธฐ๊ฐ ๋์์ ์๋ณ ์๋์ฐจ ID ๋ณ ์ด ๋์ฌ ํ์(์ปฌ๋ผ๋ช : RECORDS) ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅ" ์ด๋ถ์์ 8์๋ถํฐ 10์๊น์ง์ ๊ฒฐ๊ณผ๋ฅผ ๋๋ฒ ์จ์ผํ ์ผ์ด ์๊ฒผ๋ค.
3๊ฐ์๊ฐ ์ด 5ํ ๋ ํธ๋ ์ฐจ๋ฅผ ๊ฒ์ํ ๋ ํ๋ฒ
3๊ฐ์๊ฐ ๊ธฐ๋ก์ ๋ฌ๋ง๋ค ์ฐจ๋ง๋ค ๋ ํธ ์นด์ดํธ ํด์ค ๋ ํ๋ฒ
๊ทธ๋์ ์ด๋ฒ์ ์์ ํ ์ด๋ธ์ ์จ์ 2๋ฒ ๋ฐ๋ณต์ํ๊ณ ํ๋ฒ์ ๊ฒฐ๊ณผ๋ฌผ๋ก SELECT๋ฌธ์ ๋๋ฒ ์ฐ๋ ๊ฑธ๋ก!
'Coding Test > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Programmers] ์ ์ ์๊ฐ ๊ตฌํ๊ธฐ(2) (0) | 2023.04.19 |
---|---|
Programmers] ์กฐํ์๊ฐ ๊ฐ์ฅ ๋ง์ ์ค๊ณ ๊ฑฐ๋ ๊ฒ์ํ์ ์ฒจ๋ถํ์ผ ์กฐํํ๊ธฐ (0) | 2023.04.17 |
Programmers] ์ ์ ๋ณ ์นดํ ๊ณ ๋ฆฌ ๋ณ ๋งค์ถ์ก ์ง๊ณํ๊ธฐ (0) | 2023.04.15 |
Programmers] ์ฃผ๋ฌธ๋์ด ๋ง์ ์์ด์คํฌ๋ฆผ๋ค ์กฐํํ๊ธฐ (0) | 2023.04.14 |
Programmers] ์ทจ์๋์ง ์์ ์ง๋ฃ ์์ฝ ์กฐํํ๊ธฐ (0) | 2023.04.10 |