Day45

강태훈·2026년 3월 6일

nbcamp TIL

목록 보기
45/58

코드카타 - 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 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:

구분자약어
년도yearyy,yyyy
분기quarterqq,q
monthmm,m
daydd,d
weekwk
시간hourm
minutemi,n
secondss,s
밀리초millisecondms
마이크로초microsecondmcs
나노초nanosecondns

자동차 평균 대여기간 구하기

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) -- 찾은 헤비 유저로 필터링
;

0개의 댓글