1. 자동차 평균 대여기간 구하기
✅문제 풀이
SELECT CAR_ID,
ROUND(AVG(DATEDIFF(END_DATE, START_DATE) +1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVG(DATEDIFF(END_DATE, START_DATE) + 1 ) >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
# 출력할 값: CAR_ID, AVERAGE_DURATION
평균 대여 기간이 7일 이상인 자동차들의 평균 대여 기간을 구하기 위해서는 두 날짜의 차이를 구해주는 함수인 DATEDIFF를 통해서 기간을 출력해야 한다.
DATEDIFF( 'End_Date', 'Start_Date')을 하면 차이가 나오고, + 1을 해야 종료일과 시작일을 포함하는 값이 나온다.
ROUND 함수를 가지고 소수점 두번째 자리에서 반올림한다.
#GROUP BY를 통해서 CAR_ID로 묶어주고
#HAVING 절로 평균 대여 기간이 7일 이상인 값들만 출력한다.
2. 우유와 요거트가 담긴 장바구니
✅문제풀이
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME IN ('Milk','Yogurt')
GROUP BY CART_ID
HAVING COUNT(DISTINCT NAME)=2
ORDER BY CART_ID
# 출력할 값: CART_ID
# 조건절에서 Name컬럼에 Milk, Yogurt가 포함된 항목을 찾는다.
# GROUP BY 로 CART_ID를 묶어 준 후
# HAVING 절을 통해 Milk와 Yogurt 두 개가 공통으로 구매한 사람을 찾는다.
이 때 COUNT(DISTINCT)를 가지고 중복된 값은 제거해주어야 한다.
✅다른 풀이 방법
WITH M AS (SELECT DISTINCT CART_ID, NAME
FROM CART_PRODUCTS
WHERE NAME = 'Milk')
, Y AS (SELECT DISTINCT CART_ID, NAME
FROM CART_PRODUCTS
WHERE NAME = 'Yogurt')
SELECT Y.CART_ID
FROM Y
INNER JOIN M
ON Y.CART_ID = M.CART_ID
ORDER BY Y.CART_ID
서브쿼리로 Milk와 Yogurt가 들어간 값들을 각각 찾아주고 JOIN으로 테이블을 합친다.