-
프로그래머스_대여 기록이 존재하는 자동차 리스트 구하기Programing Language/SQL 2025. 6. 13. 20:46반응형
https://school.programmers.co.kr/learn/courses/30/lessons/157341#qna
CAR_RENTAL_COMPANY_CAR 테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 자동차 종류가 '세단'인 자동차들 중 10월에 대여를 시작한 기록이 있는 자동차 ID 리스트를 출력하는 SQL문을 작성해주세요. 자동차 ID 리스트는 중복이 없어야 하며, 자동차 ID를 기준으로 내림차순 정렬해주세요.
1. 성능 최적화 버전(where, exists)
- CAR_RENTAL_COMPANY_CAR에서 조건에 맞는 CAR_ID 가져오도록 설계
- EXISTS 함수
- 단순하게 괄호 안에 조건을 사용하는지 확인함
- JOIN과는 다르게 데이터 중복이 생기지 않음
- EXISTS (SELECT 1 FROM 조건)
- 성능 최적화 의식을 보여주는 지표
-- 조건1 세단 -- 조건2 렌탈시작일자 2022년 10월 -- 조건3 car_id 내림차순 SELECT A.CAR_ID FROM CAR_RENTAL_COMPANY_CAR A WHERE A.CAR_TYPE = '세단' AND EXISTS ( SELECT * FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY B WHERE B.CAR_ID = A.CAR_ID AND B.START_DATE >= '2022-10-01' AND B.START_DATE < '2022-11-01' ) ORDER BY A.CAR_ID DSEC ;2. 직관적인 버전 (join, where)
- inner join 후 조건 걸기
- month 함수 활용
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 AND A.CAR_TYPE = '세단' AND MONTH(B.START_DATE) = '10' ORDER BY A.CAR_ID DESC

반응형'Programing Language > SQL' 카테고리의 다른 글
프로그래머스_대장균의 크기에 따라 분류하기 2 (0) 2025.06.14 DAYOFWEEK 함수 (0) 2025.06.14 CTE(Common Table Expression) 완벽 이해 가이드 (1) 2025.06.13 프로그래머스_멸종위기의 대장균 찾기 (0) 2025.06.13 MySQL DATETIME 성능 최적화 완벽 가이드 (0) 2025.06.13