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

쥬쥬스·2023년 11월 21일
0

SQL

목록 보기
61/67
post-thumbnail

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

📍 조건

  • 자동차 종류가 '세단'
  • 10월에 대여를 시작한 기록이 있는 자동차
  • 자동차 ID 조회하되 중복 없이
  • 자동차 ID 기준 내림차순

sql 코드

1. JOIN절 O

SELECT distinct(car.car_id)
FROM car_rental_company_rental_history as history join
    (SELECT car_id
    FROM car_rental_company_car
    WHERE car_type = "세단") as car
    on history.car_id = car.car_id
WHERE month(start_date) = 10
ORDER BY car.car_id desc
  1. 자동차 종류가 세단인 경우
SELECT car_id
FROM car_rental_company_car
WHERE car_type = "세단"
  1. 10월 대여 기록이 있는 경우
    month 사용
WHERE month(start_date) = 10
  1. 자동차 ID 중복없이 조회
    distinct 사용
SELECT distinct(car.car_id)
  1. 자동차 ID 기준 내림차순
ORDER BY car.car_id desc

2. JOIN절 X

출처 : se님 MySQL 정답공유

SELECT c.CAR_ID
FROM CAR_RENTAL_COMPANY_CAR c, CAR_RENTAL_COMPANY_RENTAL_HISTORY h
WHERE c.CAR_ID = h.CAR_ID AND c.CAR_TYPE='세단' AND MONTH(h.start_date) = 10
GROUP BY c.CAR_ID
ORDER BY c.CAR_ID DESC

join을 직접적으로 사용하지 않고 자동차 ID가 같은 것들로 조회 후, 자동차 타입, 10월 대여 기록을 가져온다. 그리고 group by 로 묶어주면 중복 제거 하지 않고 자동차 ID를 가져올 수 있다.
join만 생각하고 풀었는데 이렇게도 해결할 수 있다는걸 알게되서 첨부.

profile
느려도... 꾸준히.....🐌

0개의 댓글