728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/157340#qna
- 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가
- 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시
- 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성
- 결과는 자동차 ID 기준 내림차순 정렬
테이블
CAR_RENTAL_COMPANY_RENTAL_HISTORY |
풀이과정
# '2016-10-16' 날짜를 포함하지 않으면 '대여중', 포함하면 '대여 가능'
- CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블을 보면 한 개의 CAR_ID 당 여러 번의 대여-반납이 이루어지고 있음
- 처음에 헷갈렸던 부분은 '2016-10-16' 이후에라도 반납이 돼서 현재 대여가 가능해진 자동차들도 '대여 가능'이라고 표시하는 것인줄 알았음
- 그게 아니라 '2016-10-16' 이라는 이 날짜 당일을 기준으로 '대여중'과 '대여 가능'을 구분하는 문제였던 것!
- START_DATE와 END_DATE가 '2022-10-16'을 포함하고 있으면 '대여중'인 것으로 표시
- SUM 함수 안에
- START_DATE와 END_DATE가 조건에 부합하면 True기 때문에 1을 반환
- START_DATE와 END_DATE가 조건에 부합하지 않으면 False기 때문에 0을 반환
- SUM() 대신 MAX 함수를 사용해도 정답 처리 됨.
- MIN 함수는 안 됨. MIN을 사용하면 조건에 부합하든, 부합하지 않든 모두 0을 출력하게 되기 때문
# 정답
IF문 안의 SUM함수 결과 | IF문 참, 거짓을 '대여중', '대여 가능'으로 설정 (정답) |
SELECT CAR_ID, IF(SUM(START_DATE <='2022-10-16' AND END_DATE >='2022-10-16'), SUM(START_DATE <='2022-10-16' AND END_DATE >='2022-10-16'), SUM(START_DATE <='2022-10-16' AND END_DATE >='2022-10-16')) AS AVAILABILITY FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_ID ORDER BY CAR_ID DESC |
SELECT CAR_ID, IF(SUM(START_DATE <='2022-10-16' AND END_DATE >='2022-10-16') ,'대여중', '대여 가능') AS AVAILABILITY FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_ID ORDER BY CAR_ID DESC |
728x90
'코딩테스트 > SQL 코드카타' 카테고리의 다른 글
MySQL 프로그래머스 | 특정 형질을 가지는 대장균 찾기 (비트연산자 활용) (1) | 2024.10.08 |
---|---|
MySQL 프로그래머스 | 언어별 개발자 분류하기 (GROUP_CONCAT, FIND_IN_SET 함수) (2) | 2024.09.30 |
MySQL 프로그래머스 | 식품분류별 가장 비싼 식품의 정보 조회하기 (2) | 2024.09.24 |
MySQL 프로그래머스 | 입양 시각 구하기2 (SQL식 반복문 : RECURSIVE 재귀 가상테이블 만들기) (3) | 2024.09.23 |
MySQL 프로그래머스 | FrontEnd 개발자 찾기 (비트 연산자로 조인하기) (0) | 2024.09.20 |
댓글