코딩 테스트 연습 - 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/157340
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
문제 풀이
생각 과정
그전에 풀었던 연습문제에 비해서 난이도가 확 올라갔다...
우선 원하는 결과 CAR_ID
SELECT CAR_ID,
그리고 기간에 10월 16일이 포함되어있는지 확인하는 AVAILABILITY
-> IF, BETWEEN AND, AS 사용
SELECT CAR_ID,
IF(DATE('2022-10-16') BETWEEN START_DATE AND END_DATE ,"대여중", "대여 가능" )AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
그리고 차 번호로 중복제거하고 정렬하면
SELECT CAR_ID,
IF(DATE('2022-10-16') BETWEEN START_DATE AND END_DATE ,"대여중", "대여 가능" )AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;
오답이 나온다.
원인을 찾아보니 GROUP BY로 묶을 때 AVAILABILITY에 상관 없이 그룹화하기 때문에
이런 경우에서 대여 가능이라고 표시가 되버린다.
구현
결국 다른사람들의 풀이를 참고했다.
내가 작성했던 코드에서 조금만 수정하면된다.
->IN 을 사용하여 10월 16일에 대여중인 경우에는 해당 CAR_ID의 AVAILABILITY를
모두 "대여중"으로 한다.
SELECT CAR_ID,
IF( CAR_ID IN
(SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE('2022-10-16') BETWEEN START_DATE AND END_DATE ),
"대여중", "대여 가능" )
AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;
'공부 일지 > 문제풀이' 카테고리의 다른 글
[프로그래머스] 서울에 위치한 식당 목록 출력하기(MySQL) (0) | 2023.11.21 |
---|---|
[프로그래머스] 조건에 부합하는 중고거래 댓글 조회하기 (MySQL) (0) | 2023.11.21 |
[프로그래머스] 동명 동물 수 찾기(MySQL) (0) | 2023.11.15 |
[백준] 대표 선수 (JAVA) (0) | 2023.05.14 |
[백준] 수들의 합 2 (JAVA) (1) | 2023.05.10 |