[MySQL] 대여 기록이 존재하는 자동차 리스트 구하기
2024. 7. 12.
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/157341

 

프로그래머스

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

programmers.co.kr

 

 

1. 서론

 

String, Date 유형의 SQL 문제이다. 다른 건 몰라도 String이랑 Date 다루는 법은 이상하게 돌아서면 까먹게 되어 굉장히 난감했다.

나름 레벨 3의 수준 있는 문제이다. 이런 유형의 문제는 메소드를 얼마나 아냐, 모르느냐에 따라서 1초 만에 결정이 나는 문제라서... 코테에 이런 거 나오면 그냥 gg다... (안 그러려고 공부하는 거지만)

 

2. 문제 풀이

 

CAR_RENTAL_COMPANY_CAR: CAR_ID, CAR_TYPE, DAILY_FEE, OPTIONS

(자동차 ID, 자동차 종류, 일일 대여 요금(원), 자동차 옵션 리스트)

 

CAR_RENTAL_COMPANY_RENTAL_HISTORY: HISTORY_ID, CAR_ID, START_DATE, END_DATE

(자동차 대여 기록 ID, 자동차 ID, 대여 시작일, 대여 종료일)

 

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

 

우리가 알아야 하는 조건은 아래와 같다.

 

1. 자동차 종류  =  '세단'

2. 자동차의 대여 시작 기록 = 10월

3. id 중복 없어야 함

4. 자동차 id 내림차순으로 정렬

 

여기서 포인트는 2번이다. Date 타입을 어떻게 분리해서 조건을 걸 것인가?

처음에는 substring으로 미개하게 할까..(그것밖에 생각이 안 남) 하다가 결국 검색해 봤다.

 

YEAR : 연도
MONTH : 월 
DAY : 일
HOUR : 시 
MINUTE : 분 
SECOND : 초

 

select HOUR(date)
from table

 

 

이런 식으로 작성하면 date라는 컬럼에서 시간만 추출해 낼 수 있는 것이다.

 

 

3. 코드 설명

 

 

select distinct c.car_id
from car_rental_company_car c, car_rental_company_rental_history r
where c.car_id = r.car_id and car_type = '세단' and MONTH(r.start_date) = '10'
order by c.car_id desc

 

 

1. 자동차 종류  =  '세단' -> where절

2. 자동차의 대여 시작 기록 = 10월 -> where절 month를 활용해서 10월만 분리했다.

3. id 중복 없어야 함 => distinct

4. 자동차 id 내림차순으로 정렬 => desc

 

 

 

반응형
myoskin