๋ฌธ์
๐ MySQL ๋ก ํ์ด
๐ ๋ฌธ์ ๋งํฌ :
๐ ๋ฌธ์ ์ค๋ช :
CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ ์ด๋ธ์์ 2022๋ 10์ 16์ผ์ ๋์ฌ ์ค์ธ ์๋์ฐจ์ธ ๊ฒฝ์ฐ '๋์ฌ์ค' ์ด๋ผ๊ณ ํ์ํ๊ณ , ๋์ฌ ์ค์ด์ง ์์ ์๋์ฐจ์ธ ๊ฒฝ์ฐ '๋์ฌ ๊ฐ๋ฅ'์ ํ์ํ๋ ์ปฌ๋ผ(์ปฌ๋ผ๋ช : AVAILABILITY)์ ์ถ๊ฐํ์ฌ ์๋์ฐจ ID์ AVAILABILITY ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๋ฐ๋ฉ ๋ ์ง๊ฐ 2022๋ 10์ 16์ผ์ธ ๊ฒฝ์ฐ์๋ '๋์ฌ์ค'์ผ๋ก ํ์ํด์ฃผ์๊ณ ๊ฒฐ๊ณผ๋ ์๋์ฐจ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
๐ ํ ์ด๋ธ :
๋ค์์ ์ด๋ ์๋์ฐจ ๋์ฌ ํ์ฌ์ ์๋์ฐจ ๋์ฌ ๊ธฐ๋ก ์ ๋ณด๋ฅผ ๋ด์ 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 |
ํ์ด
์ฟผ๋ฆฌ)
SELECT
C.CAR_ID,
CASE WHEN A.CAR_ID IS NULL THEN '๋์ฌ ๊ฐ๋ฅ' ELSE '๋์ฌ์ค' END AS AVAILABILITY
FROM (SELECT DISTINCT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY) AS C
LEFT OUTER JOIN
(SELECT DISTINCT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '2022-10-16' BETWEEN START_DATE AND END_DATE) AS A
ON C.CAR_ID = A.CAR_ID
ORDER BY C.CAR_ID DESC
๋ฆฌ๋ทฐ)
ํน์ ๋ ์ง๊ฐ ์ด๋ ๋ ์ง ์ฌ์ด์ ์๋์ง ์์๋ณด๋ ค๋ฉด BETWEEN์ด๋ ๋ถ๋ฑํธ๋ฅผ ์จ์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ๋ณด๋ค ๋ ์ค์ํ๋ ๊ฑด
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ค์์ผ๋ก ์์ฌ์๋์ง ์ ํ์ ํ์ฌ์ผ ํ๋ค๋ ๊ฑธ ์๋ ค์ค ๋ฌธ์ ์๋ค.
๋ ํธ ๋ด์ญ์ ์์๋์ ํ ์ด๋ธ์ด๋ผ ๊ฐ์ car_id๊ฐ ๋ ํธ๋์ด์ง ๋ด์ญ์ด ์ฌ๋ฟ ์กด์ฌํ ์ ์๋ค๋ ๊ฒ์ ์๊ฐํ์ด์ผํ๋ค.
๊ทธ๋์ distinct๋ก ์ค๋ณต์ ์ ๊ฑฐํ C์ 2022-10-16์ผ์ ๋์ฌ์ค์ธ car_id๋ง ์ง์ํ์ฌ ๋ฆฌํดํ ํ ์ด๋ธ์ joinํ๋๋ฐ
์ด๋ ๋ชจ๋ car_id์ ๋ํด ๋์ฌ์ค์ธ car_id๊ฐ 1:1 ๋งค์นญ์ด ์๋๋ฏ๋ก ๋ชจ๋ car_id๋ฅผ ๊ฐ์ง C๋ฅผ ๊ธฐ์ค์ผ๋ก left outer joinํ์๊ณ ,
A์ car_id๊ฐ null์ด๋ฉด ๋์ฌ๊ฐ๋ฅ ์๋๋ฉด ๋์ฌ์ค์ผ๋ก ๋ฐํํด์ค๋ค.
'Coding Test > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Programmers] ์ทจ์๋์ง ์์ ์ง๋ฃ ์์ฝ ์กฐํํ๊ธฐ (0) | 2023.04.10 |
---|---|
Programmers] ๋ , ์, ์ฑ๋ณ ๋ณ ์ํ ๊ตฌ๋งค ํ์ ์ ๊ตฌํ๊ธฐ (0) | 2023.04.08 |
Programmers] ์กฐ๊ฑด์ ๋ง๋ ์ฌ์ฉ์ ์ ๋ณด ์กฐํํ๊ธฐ (0) | 2023.04.07 |
Programmers] ์ต๋๊ฐ ๊ตฌํ๊ธฐ (0) | 2023.04.07 |
Programmers] ์ํ๋ถ๋ฅ๋ณ ๊ฐ์ฅ ๋น์ผ ์ํ์ ์ ๋ณด ์กฐํํ๊ธฐ (0) | 2023.04.06 |