CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 2022년 10월 16일에 대여 중인 자동차인 경우 '대여중' 이라고 표시하고, 대여 중이지 않은 자동차인 경우 '대여 가능'을 표시하는 컬럼(컬럼명: AVAILABILITY)을 추가하여 자동차 ID와 AVAILABILITY 리스트를 출력하는 SQL문을 작성해주세요. 이때 반납 날짜가 2022년 10월 16일인 경우에도 '대여중'으로 표시해주시고 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.
https://school.programmers.co.kr/learn/courses/30/lessons/157340
-- 대여 가능, 대여중 둘 다 있을 때 대여중이 떠야 됨
WITH car AS(
SELECT
CAR_ID,
CASE
WHEN END_DATE >= '2022-10-16' THEN '대여중'
ELSE '대여 가능'
END 'AVAILABILITY'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID, AVAILABILITY
ORDER BY CAR_ID, AVAILABILITY
)
-- 2가지가 존재하면 중복 ID가 존재한다. 따라서 그 중복 ID는 다 대여중으로 변환
SELECT *, IF(COUNT(*) = 2, '대여중','대여 가능') cnt
FROM car
GROUP BY CAR_ID
SELECT
CAR_ID,
CASE
WHEN MAX(END_DATE) >= '2022-10-16' THEN '대여중' -- 반납 날짜가 2022.10.16 기준으로 대여중
ELSE '대여 가능' -- 아니라면 대여 가능
END 'AVAILABILITY'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID -- CAR_ID로 그룹화를 해서 날짜의 최소, 최대 기간을 한 번에 확인
ORDER BY CAR_ID DESC
SELECT
CAR_ID,
CASE
## ID별 기간 중 특정 날짜가 있으면 1 없으면 0에서 MAX로 인해 동일한 ID 결과 중 최고 값으로만 값이 반환
WHEN MAX('2022-10-16' BETWEEN START_DATE AND END_DATE) THEN '대여중'
ELSE '대여 가능' -- 아니라면 대여 가능
END 'AVAILABILITY'
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID -- CAR_ID로 그룹화를 해서 날짜 기간을 한 번에 확인
ORDER BY CAR_ID DESC
대장균 개체의 ID(ID)와 자식의 수(CHILD_COUNT)를 출력하는 SQL 문을 작성해주세요. 자식이 없다면 자식의 수는 0으로 출력해주세요. 이때 결과는 개체의 ID 에 대해 오름차순 정렬해주세요.
https://school.programmers.co.kr/learn/courses/30/lessons/299305
WITH id AS(
SELECT
IFNULL(PARENT_ID, 0) PARENT, -- 그룹화 후 NULL은 출력되지 않음
COUNT(PARENT_ID) cnt
FROM ECOLI_DATA
GROUP BY PARENT_ID -- 그룹화를 해야 COUNT를 할 수 있다.
)
SELECT
ID,
IFNULL(cnt, 0) CHILD_COUNT -- 자식이 없는 NULL은 0으로 변환
FROM id i
RIGHT JOIN ECOLI_DATA e
ON i.PARENT = e.ID -- ID와 PARENT를 조인해서 자식의 수를 맵핑한다.
ORDER BY ID
SELECT
e.ID,
COUNT(i.PARENT_ID) CHILD_COUNT
FROM ECOLI_DATA i
RIGHT JOIN ECOLI_DATA e
ON i.PARENT_ID = e.ID -- ID와 PARENT를 조인해서 자식의 수를 맵핑한다.
GROUP BY e.ID
ORDER BY e.ID