프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
매우 다양한 풀이
대여중이 하나라도 있는 차량은 대여중을 출력해야합니다. 이 부분을 해결하기가 어려웠는데요, 정말 다양한 해결방법이 있었습니다.
좋은 풀이들부터 소개하겠습니다.
group by, max/min, if, in, case 를 잘 활용하면 쿼리문이 확 압축됩니다.
IN절 서브쿼리, DISTINCT, BETWEEN, GROUP BY 없음
SELECT DISTINCT CAR_ID,
IF(CAR_ID IN ( SELECT DISTINCT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '2022-10-16' BETWEEN START_DATE AND END_DATE), '대여중', '대여 가능')
AS AVAILABILTIY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
ORDER BY CAR_ID DESC
GROUP BY, CASE, GROUP BY, MAX로 합치기 (True > False)
select CAR_ID,
case
when max('2022-10-16' between start_date and end_date) then '대여중'
else '대여 가능'
end as AVAILABILITY
from car_rental_company_rental_history
group by car_id
order by car_id desc
GROUP BY, CASE, MAX로 합치기 (대여중 > 대여 가능)
SELECT CAR_ID,
max(
case
when '2022-10-16' between start_date and end_date then '대여중'
else '대여 가능'
end) as AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
group by car_id
ORDER BY car_id desc
FROM 절 서브쿼리
SELECT car_id,
CASE
WHEN SUM(avail) > 0 THEN '대여중'
ELSE '대여 가능' END
AS AVAILABILITY
FROM
(
SELECT
CAR_ID,
CASE
WHEN START_DATE <= DATE('2022-10-16') AND DATE('2022-10-16') <= END_DATE THEN 1
ELSE 0 END
AS avail
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
ORDER BY CAR_ID DESC
) A
GROUP BY car_id
ORDER BY car_id DESC
'SQL > 프로그래머스 MySQL with code' 카테고리의 다른 글
프로그래머스 MySQL : [lv.3] 헤비 유저가 소유한 장소 (0) | 2023.07.07 |
---|---|
프로그래머스 MySQL : [lv.4] 취소되지 않은 진료 예약 조회하기 (0) | 2023.07.06 |
프로그래머스 MySQL : [lv.4] 년, 월, 성별 별 상품 구매 회원 수 구하기 (0) | 2023.07.05 |
프로그래머스 MySQL : [lv.4] 서울에 위치한 식당 목록 출력하기 (0) | 2023.07.05 |
프로그래머스 MySQL : [lv.2] 조건에 부합하는 중고거래 상태 조회하기 (0) | 2023.07.04 |