관리 메뉴

물 만날 물고기

[프로그래머스/MYSQL] - (8) 대여 기록이 존재하는 자동차 리스트 구하기 String, Date 본문

DB & SQL/프로그래머스

[프로그래머스/MYSQL] - (8) 대여 기록이 존재하는 자동차 리스트 구하기 String, Date

Lung Fish 2023. 7. 11. 01:53

🔍 예상 검색어

더보기

# 물만날물고기

# SQL

# 대여 기록이 존재하는 자동차 리스트 구하기String, Date

# 프로그래머스

# MYSQL

# SQL 코딩테스트


해당 포스팅은 프로그래머스 MYSQL "대여 기록이 존재하는 자동차 리스트 구하기 String, Date" 문제에 대한 풀이를 정리하였습니다.

 

▶ 문제

코딩테스트 연습 - 대여 기록이 존재하는 자동차 리스트 구하기 | 프로그래머스 스쿨

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

▶ 내 정답

 

(1) WHERE MONTH(START_DATE) = 10)

-- 코드를 입력하세요
-- CAR_RENTAL_COMPANY_CAR 
-- CAR_RENTAL_COMPANY_RENTAL_HISTORY 
-- 자동차 종류가 '세단'인 자동차들 중 10월에 대여를 시작한 기록이 있는 자동차 ID 리스트를 출력
-- 자동차 ID 리스트는 중복이 없어야 하며, 자동차 ID를 기준으로 내림차순 정렬

/* (1) 자동차 종류가 '세단'인 자동차
(SELECT *
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = '세단')
*/

/* (2) 10월에 대여를 시작한 기록이 있는 자동차
(SELECT *
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
WHERE MONTH(START_DATE) = 10)
*/

SELECT DISTINCT H.CAR_ID
FROM (SELECT *
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
WHERE MONTH(START_DATE) = 10) AS H
INNER JOIN (SELECT *
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = '세단') AS C ON H.CAR_ID = C.CAR_ID
ORDER BY H.CAR_ID DESC;

 

(2) WHERE DATE_FORMAT(START_DATE, "%Y-%m") = "2022-10" 

SELECT DISTINCT H.CAR_ID
FROM (SELECT *
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
-- WHERE MONTH(START_DATE) = 10) AS H
WHERE DATE_FORMAT(START_DATE, "%Y-%m") = "2022-10" ) AS H
INNER JOIN (SELECT *
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = '세단') AS C ON H.CAR_ID = C.CAR_ID
ORDER BY H.CAR_ID DESC;

 

 

▶ 다른 사람 정답 (1)

SELECT 
    DISTINCT CAR_ID
FROM 
    CAR_RENTAL_COMPANY_RENTAL_HISTORY 
LEFT JOIN 
    CAR_RENTAL_COMPANY_CAR USING (CAR_ID)
WHERE 
    CAR_TYPE='세단' 
    AND START_DATE LIKE '2022-10%'
ORDER BY 
    CAR_ID DESC;

 

▶ 다른 사람 정답 (2)

SELECT DISTINCT(C.CAR_ID)
FROM CAR_RENTAL_COMPANY_CAR C
INNER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY R
ON C.CAR_ID = R.CAR_ID
WHERE C.CAR_TYPE = '세단' AND MONTH(R.START_DATE) = 10
ORDER BY C.CAR_ID DESC

 

▶ 다른 사람 정답 (3)

select car_id
from car_rental_company_car
where car_id in (select car_id from car_rental_company_rental_history where start_date like '%-10-%')
and
car_type = '세단'
order by car_id desc;

 

▶ 다른 사람 정답 (4)

SELECT
    DISTINCT A.CAR_ID
FROM
    CAR_RENTAL_COMPANY_CAR A
INNER JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY B ON
    A.CAR_ID = B.CAR_ID
WHERE
    A.CAR_TYPE= '세단' AND
    MONTH(B.START_DATE) ='10'
ORDER BY 
    CAR_ID DESC

 

▶ 다른 사람 정답 (5)

-- 대여 기록이 존재하는 자동차 리스트 구하기
SELECT DISTINCT(A.CAR_ID) FROM CAR_RENTAL_COMPANY_CAR A, CAR_RENTAL_COMPANY_RENTAL_HISTORY B
WHERE A.CAR_ID = B.CAR_ID AND CAR_TYPE = '세단' AND MONTH(B.START_DATE) = '10'
ORDER BY A.CAR_ID DESC

 

▶ 총평

 

 해당 문제는 JOIN과 WHERE절을 사용해서 해결할 수도 있지만,  WHERE절만 사용하거나 WHERE절과 서브쿼리를 이용해 문제를 풀 수도 있다. 같은 정답이지만 다양한 풀이가 존재하는데 어떤 코드가 더 효율적인가는 조금 더 경험을 통해서 익혀야 할 것 같다.

 

 

▼ 참고자료

No. 내용 비고
1 [MySQL] 2022년 10월 - LIKE 활용 | 프로그래머스 스쿨 choco-chanel
2023.6.15 15:11
2 MySQL 정답 공유 join | 프로그래머스 스쿨 혜린
2023.3.7 14:03
3 mysql 정답 공유 (join x) | 프로그래머스 스쿨 한관진
2023.3.28 12:09
4 MySQL 답안 JOIN(X) | 프로그래머스 스쿨 안장근
2023.2.10 01:18
5 - -

▼ 복습/히스토리

더보기
No. 복습일 비고
1    
2    
3    
4    
5    

- 작성코드

--