일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 어쩌다 마케팅
- 스파르타코딩
- SQL
- 파이썬 철저 입문
- MySQL
- 티스토리챌린지
- 프로그래머스
- hackerrank
- 파이썬 철저입문
- 내일배움카드
- 스파르타 코딩
- 파이썬
- 내일배움캠프
- wil
- 파이썬 머신러닝 완벽 가이드
- 파이썬 머신러닝 완벽가이드
- 스파르타
- 오블완
- 프로젝트
- 텍스트 분석
- 실전 데이터 분석 프로젝트
- 회귀분석
- 미세먼지
- R
- harkerrank
- 내일배움
- Cluster
- 중회귀모형
- TiL
- 웹 스크랩핑
- Today
- Total
OkBublewrap
자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 본문
<문제>
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.
<예시>
예를 들어 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블이 다음과 같다면
HISTORY_ID | CAR_ID | START_DATE | END_DATE |
1 | 4 | 2022-09-27 | 2022-09-27 |
2 | 3 | 2022-10-03 | 2022-10-04 |
3 | 2 | 2022-10-05 | 2022-10-05 |
4 | 1 | 2022-10-11 | 2022-10-16 |
5 | 3 | 2022-10-13 | 2022-10-15 |
6 | 2 | 2022-10-15 | 2022-10-17 |
2022년 10월 16일에 대여 중인 자동차는 자동차 ID가 1, 2인 자동차이고, 대여 가능한 자동차는 자동차 ID가 3, 4이므로, '대여중' 또는 '대여 가능' 을 표시하는 컬럼을 추가하고, 자동차 ID를 기준으로 내림차순 정렬하면 다음과 같이 나와야 합니다.
CAR_ID | AVAILABILITY |
4 | 대여 가능 |
3 | 대여 가능 |
2 | 대여중 |
1 | 대여중 |
<풀이>
START_DATE와 END_DATE 사이에 '2022-10-13'이 만족하면 될 것 같다. 이 사이에 있다면 대여중이고 없다면 대여 가능으로 표시하면 될 것 같다. 그룹화는 CAR_ID로 하면 된다. 우선 IF절로 대여가능, 대여중을 출력을 했다
SELECT CAR_ID, START_DATE, END_DATE,
IF(START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16' ,'대여중', '대여가능')
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
ORDER BY CAR_ID DESC
30 2022-10-27 00:00:00 2022-10-27 00:00:00 대여가능
29 2022-08-02 00:00:00 2022-08-05 00:00:00 대여가능
1)
일부분만 봤을 때 10-26이 중간에 있지 않기 때문에 올바르게 나왔다. 다음은 어떻게 진행을 할지 고민을 해봐야하는데
저 쿼리을 작성했을 때 여러가지 CAR_ID가 나오는데 그 중에 하나라도 대여중이 있으면 대여중으로 표시하고 하나도 없으면 대여가능으로 출력을 하면 될 것 같다.
2)
CAR_ID을 중복제거를 해봤다.
SELECT DISTINCT(CAR_ID),
IF(START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16' ,'대여중', '대여가능') AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
ORDER BY CAR_ID DESC
여기서 MAX나 MIN을 사용해서 하나만 뽑아오면 값이 나올 것 같다.
3)
CAR_ID | AVAILABILITY |
30 | 대여가능 |
29 | 대여가능 |
29 | 대여중 |
car_id : 29는 대여중으로 나와야 된다. 계속 오답처리가 되길래 봤더니 '대여 가능' 띄어쓰기를 안하고 있었다.
SELECT CAR_ID,
MAX(IF(START_DATE <= '2022-10-16' AND END_DATE >= '2022-10-16' ,'대여중', '대여 가능')) AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY 1
ORDER BY CAR_ID DESC
DISTINCT를 써도 안써도 상관은 없었다.
'개발 > SQL' 카테고리의 다른 글
대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2023.03.13 |
---|---|
조건에 맞는 사용자 정보 조회하기 (0) | 2023.03.12 |
조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2023.03.09 |
조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2023.03.09 |
조건에 부합하는 중고거래 상태 조회하기 (0) | 2023.03.09 |