REST_INFO
와 REST_REVIEW
테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.제출한 쿼리 :
SELECT I.REST_ID
, I.REST_NAME
, I.FOOD_TYPE
, I.FAVORITES
, I.ADDRESS
, ROUND(AVG(R.REVIEW_SCORE), 2) AS "SCORE"
FROM REST_INFO AS I
INNER JOIN REST_REVIEW AS R ON I.REST_ID = R.REST_ID
WHERE ADDRESS LIKE "서울%"
GROUP BY I.REST_ID, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS
ORDER BY SCORE DESC, I.FAVORITES DESC;
식당 주소가 '서울특별시'가 아닌 '서울시'로 되어있는 데이터값이 있으므로 '서울특별시%'가 아니라 '서울%'로 조건을 지정해 주었다.
CAR_RENTAL_COMPANY_RENTAL_HISTORY
테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE
)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.제출한 쿼리 :
SELECT HISTORY_ID
, CAR_ID
, DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE
, DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE
, CASE WHEN DATEDIFF(END_DATE, START_DATE)+1 >= 30 THEN '장기 대여'
ELSE '단기 대여'
END AS "RENT_TYPE"
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE, '%Y-%m') LIKE '2022-09'
ORDER BY HISTORY_ID DESC;
DATEDIFF는 날짜의 차이를 구해주기 때문에 여기서는 datediff(enddate, startdate)가 아니라 datediff(enddate, startdate) + 1로 계산을 해줘야 한다.(9월 1일에 대여해서 9월 1일에 반납하면 대여기간이 1일, 9월 2일 대여해서 9월 2일에 반납 해야 대여기간이 2일이 되기 때문)
CAR_RENTAL_COMPANY_RENTAL_HISTORY
테이블에서 평균 대여 기간이 7일 이상인 자동차들의 자동차 ID와 평균 대여 기간(컬럼명: AVERAGE_DURATION
) 리스트를 출력하는 SQL문을 작성해주세요. 평균 대여 기간은 소수점 두번째 자리에서 반올림하고, 결과는 평균 대여 기간을 기준으로 내림차순 정렬해주시고, 평균 대여 기간이 같으면 자동차 ID를 기준으로 내림차순 정렬해주세요.제출한 쿼리 :
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 AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
제출한 쿼리 :
WITH HeavyUsers AS (
SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(*) >= 2
)
SELECT *
FROM PLACES
WHERE HOST_ID IN (SELECT HOST_ID FROM HeavyUsers)
ORDER BY ID;
헤비 유저는 하나 이상의 공간을 등록한 사용자를 의미하므로, 단순히 HOST_ID가 2 이상인 사용자를 선택하는 것으로는 헤비 유저를 정확하게 식별할 수 없다.
그렇기 때문에 다음과 같은 쿼리를 사용할 수 없다.SELECT ID , NAME , HOST_ID FROM PLACES WHERE HOST_ID >= 2 ORDER BY ID;
예를 들어 HOST_ID가 2, 3, 4인 사용자 중에서 2번 사용자만 헤비 유저라면, 위의 쿼리는 2, 3, 4번 사용자의 공간을 모두 선택하게 되기 때문이다.
제출한 쿼리 :
SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME IN ('Milk', 'Yogurt')
GROUP BY CART_ID
HAVING COUNT(DISTINCT NAME) = 2
ORDER BY CART_ID;
"우유"와 "요거트" 두 제품이 동시에 포함되어야 하므로, DISTINCT를 사용하여 중복된 제품을 하나로 취급해준다.
오늘의 TMI
살얼음판을 걷는 기분