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 I
JOIN REST_REVIEW R
ON I.REST_ID = R.REST_ID
WHERE I.ADDRESS LIKE '서울%'
GROUP BY I.REST_ID
ORDER BY 6 DESC, 4 DESC
;
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) >= 29 THEN '장기 대여'
-- 날짜 차이 30일 이상 구하기
ELSE '단기 대여'
END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%' -- DATE도 문자열처럼 LIKE로 비교!!
ORDER BY 1 DESC
;
DATEDIFF(END_DATE, START_DATE) +1:
START_DATE와 END_DATE 사이 날짜 차이,
'09-01'과 '09-30' 사이 날짜 차이를 구하면 30일 이지만 29일이 나오기 때문에 +1 필요
DATEDIFF('구분자', 'START_DATE', 'END_DATE') +1:
| 구분자 | 약어 | |
|---|---|---|
| 년도 | year | yy,yyyy |
| 분기 | quarter | qq,q |
| 월 | month | mm,m |
| 일 | day | dd,d |
| 주 | week | wk |
| 시간 | hour | m |
| 분 | minute | mi,n |
| 초 | second | ss,s |
| 밀리초 | millisecond | ms |
| 마이크로초 | microsecond | mcs |
| 나노초 | nanosecond | ns |
WITH DIFF AS (
SELECT HISTORY_ID, CAR_ID, DATEDIFF(END_DATE, START_DATE) + 1 AS DATE_DIFF
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
) -- 날짜 차이 컬럼 추가
SELECT C.CAR_ID, ROUND(AVG(D.DATE_DIFF), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY C
JOIN DIFF D
ON C.HISTORY_ID = D. HISTORY_ID
GROUP BY CAR_ID
HAVING AVG(D.DATE_DIFF) >= 7
ORDER BY 2 DESC, 1 DESC
;
WITH FIND_HEAVY AS (
SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(ID) >=2
) -- 헤비 유저(2개 이상 등록한 사람) 찾기
SELECT P.*
FROM PLACES P
LEFT JOIN FIND_HEAVY H
ON P.HOST_ID = H.HOST_ID
WHERE P.HOST_ID IN (H.HOST_ID) -- 찾은 헤비 유저로 필터링
;