SQL/MY SQL 문제 풀이(프로그래머스)

[MYSQL] PROGRAMMERS_대여 기록이 존재하는 자동차 리스트 구하기

SQL공부 2024. 2. 22. 20:24
반응형

SELECT distinct c.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR as c, CAR_RENTAL_COMPANY_RENTAL_HISTORY as r
WHERE c.CAR_ID = r.CAR_ID
AND CAR_TYPE = '세단'
AND month(START_DATE) = 10
order by 1 desc

문제
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 자동차 종류가 '세단'인 자동차들 중 10월에 대여를 시작한 기록이 있는 자동차 ID 리스트를 출력하는 SQL문을 작성. 자동차 ID 리스트는 중복이 없어야 하며, 자동차 ID를 기준으로 내림차순 정렬

 

중점인 부분은 두 테이블의 조인, 차의 종류, 대여 시작일 10월, 중복없음, 내림차순 정렬 정도로 보멸 될 것 같다.

먼저 두테이블의 조인이다. 일반적으로 양쪽 테이블을 공통 집합을 다루는 자료는 inner join 으로 처리하면 된다. 겹치지 않는 부분을 문제에서 따로 만들지도 않았을 뿐더러 있다 하더라도 문제에서 요구하는 부분은 겹치지 않는 부분이 필요가 없게 나온다. (애초에 데이터가 부족한 녀석들 이니.. NULL값처리 하지 않는 이상...) 그렇게 공통된 컬럼인 CAR_ID로 조인을 해준다. 유니크 하기도 하고 문제를 보면 공통된 컬럼이 그거 말곤 없다. 다음으로 CAR_TYPE이 '세단' 인 것을 필터에 추가해준다.  10월에 대여 '시작' 인 값을 구해야하기에 당연 START_DATE를 다루어야 한다. 그리고 년도 조건없이 10월만 요청하였기에 정석적인 방법은 해당 날짜 데이터에 MONTH 함수를 걸고 10을 필터 하는게 가장 좋다. 그후 정렬을 한 후 데이터를 조회해 주는데.. 여기까지만 하면 중복된 데이터값들이 추출된다. 그러니 SELECT에서 마지막에 distinct를 걸어 유일 값으로 만들어주면 된다.

 

반응형