250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 코딩테스트
- leetcode
- mysql
- leetcode문풀
- UNION
- 약수구하기
- sql문풀
- 파이썬문풀
- leetcodesql50
- with절
- 리트코드sql
- SQL고득점KIT
- 셀프조인
- 윈도우함수
- join
- 프로그래머스문풀
- 문풀
- levle1
- SQL테스트
- SQL
- With
- 프로그래머스
- 데이터분석
- 코테
- 서브쿼리
- GROUPBY
- 파이썬
- 데이터리안
- 위키독스
- 활성사용자수
Archives
- Today
- Total
꿈은 데이터분석가, 취미는 계획
[MY SQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 본문
728x90
출처:[프로그래머스 스쿨 - 코딩테스트 연습 - MY SQL 문제] : 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기
링크: https://school.programmers.co.kr/learn/courses/30/lessons/157340
문제(일부): 특정일에 대여 중인 자동차의 경우 '대여중' 이라고 표시, 아닌 경우 '대여가능'을 표시하는 컬럼 추가
1. WITH절과 CASE 활용하기
1) WITH절에서 CASE WHEN으로 대여기간이 '2022-10-16'에 있는 경우 1, 아닌 경우 0인 AVAILABILITY컬럼 생성
2) 메인쿼리에서 1번의 컬럼의 합에 대해 1이면 '대여중' 0이면 '대여 가능'으로 표시
WITH RENTAL AS(
SELECT CAR_ID,
CASE
WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN 1
ELSE 0
END AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
)
SELECT CAR_ID,
CASE SUM(AVAILABILITY)
WHEN 1 THEN '대여중'
WHEN 0 THEN '대여 가능'
END AS AVAILABILITY
FROM RENTAL
GROUP BY CAR_ID
ORDER BY CAR_ID DESC
2. 서브쿼리와 CASE 활용하기
1) CASE구문에서 '2022-10-16'에 대여중인 CAR_ID를 찾는 서브쿼리를 생성,
CAR_ID가 서브쿼리의 CAR_ID에 있는 경우 대여중으로 그렇지 않은 경우 대여가능으로 표시
SELECT CAR_ID, (
CASE
WHEN CAR_ID IN (
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '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
3. WITH절과 JOIN활용하기
1) '2022-10-16'에 대여중인 CAR_ID를 추출한 WITH절 생성
2) WITH절과 원본df의 CAR_ID를 RIGH JOIN
3) CAR_ID에 NULL이 있다면 대여가능, 그렇지 않으면 대여중
WITH RENTALED AS(
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '2022-10-16' BETWEEN START_DATE AND END_DATE
)
SELECT H.CAR_ID,
IF(ISNULL(R.CAR_ID), '대여 가능', '대여중') AS AVAILABILITY
FROM RENTALED AS R
RIGHT JOIN(
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
)AS H ON
R.CAR_ID = H.CAR_ID
GROUP BY H.CAR_ID
ORDER BY H.CAR_ID DESC
728x90
'SQL > sql문풀' 카테고리의 다른 글
[MY SQL] 2개를 모두 담은 ID찾기(우유와 요거트가 담긴 장바구니) (0) | 2024.07.26 |
---|---|
[MY SQL] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회 (0) | 2024.07.26 |
[MY SQL] DATEDIFF와 TIMESTAMPDIFF 차이(날짜차이 구하기) (0) | 2024.07.21 |
[MY SQL] 세대별로 자식 수가 없는 개체 찾기 (0) | 2024.05.08 |
[MY SQL] 재귀쿼리를 활용하여 특정 세대 찾기 (0) | 2024.05.08 |