ONLINE_SALE
테이블과 OFFLINE_SALE
테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성해주세요. OFFLINE_SALE
테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해주세요. 결과는 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순, 상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬해주세요.제출한 쿼리 :
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS "SALES_DATE"
, PRODUCT_ID
, USER_ID
, SALES_AMOUNT
FROM ONLINE_SALE
WHERE SALES_DATE BETWEEN '2022-03-01' AND '2022-03-31'
UNION ALL
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS "SALES_DATE"
, PRODUCT_ID
, NULL
, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE BETWEEN '2022-03-01' AND '2022-03-31'
ORDER BY SALES_DATE ASC, PRODUCT_ID ASC, USER_ID ASC;
USED_GOODS_BOARD
와 USED_GOODS_REPLY
테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요. 결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해주세요.제출한 쿼리 :
SELECT B.TITLE
, B.BOARD_ID
, R.REPLY_ID
, R.WRITER_ID
, R.CONTENTS
, DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') AS "CREATED_DATE"
FROM USED_GOODS_BOARD AS B
INNER JOIN USED_GOODS_REPLY AS R
ON B.BOARD_ID = R.BOARD_ID
WHERE B.CREATED_DATE LIKE '2022-10%'
ORDER BY R.CREATED_DATE ASC, B.TITLE ASC;
제출한 쿼리 :
WITH RECURSIVE ALL_HR AS(
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR + 1
FROM ALL_HR
WHERE HOUR < 23)
SELECT HOUR
, IFNULL(A.COUNT, 0) AS "COUNT"
FROM ALL_HR
LEFT JOIN (
SELECT HOUR(DATETIME) AS "HOUR"
, COUNT(*) AS "COUNT"
FROM ANIMAL_OUTS
GROUP BY HOUR
) A
USING(HOUR)
재귀쿼리라는 걸 처음 사용해 봤다.
CAR_RENTAL_COMPANY_CAR
테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY
테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN
테이블에서 자동차 종류가 '세단' 또는 'SUV' 인 자동차 중 2022년 11월 1일부터 2022년 11월 30일까지 대여 가능하고 30일간의 대여 금액이 50만원 이상 200만원 미만인 자동차에 대해서 자동차 ID, 자동차 종류, 대여 금액(컬럼명: FEE
) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 자동차 종류를 기준으로 오름차순 정렬, 자동차 종류까지 같은 경우 자동차 ID를 기준으로 내림차순 정렬해주세요.제출한 쿼리 :
SELECT C.CAR_ID AS CAR_ID
, C.CAR_TYPE AS CAR_TYPE
, ROUND(C.DAILY_FEE * 30 * (1 - P.DISCOUNT_RATE/100), 0) AS FEE
FROM CAR_RENTAL_COMPANY_CAR AS C
LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN AS P
ON C.CAR_TYPE = P.CAR_TYPE
AND P.DURATION_TYPE = '30일 이상'
AND C.CAR_TYPE IN ('세단', 'SUV')
LEFT JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY AS H
ON C.CAR_ID = H.CAR_ID
AND H.END_DATE >= '2022-11-01'
AND H.START_DATE <= '2022-11-30'
WHERE ROUND(C.DAILY_FEE * 30 * (1 - P.DISCOUNT_RATE/100)) BETWEEN 500000 AND 1999999
AND H.CAR_ID IS NULL
ORDER BY FEE DESC, CAR_TYPE ASC, CAR_ID DESC;
CAR_RENTAL_COMPANY_CAR
테이블과 CAR_RENTAL_COMPANY_RENTAL_HISTORY
테이블과 CAR_RENTAL_COMPANY_DISCOUNT_PLAN
테이블에서 자동차 종류가 '트럭'인 자동차의 대여 기록에 대해서 대여 기록 별로 대여 금액(컬럼명: FEE
)을 구하여 대여 기록 ID와 대여 금액 리스트를 출력하는 SQL문을 작성해주세요. 결과는 대여 금액을 기준으로 내림차순 정렬하고, 대여 금액이 같은 경우 대여 기록 ID를 기준으로 내림차순 정렬해주세요.제출한 쿼리 :
WITH TEMP AS (
SELECT HISTORY_ID
, CAR_ID
, CAR_TYPE
, DAILY_FEE
, DATEDIFF(END_DATE, START_DATE) + 1 AS "DAY"
, CASE WHEN (DATEDIFF(END_DATE, START_DATE) + 1) BETWEEN 7 AND 29 THEN '7일 이상'
WHEN (DATEDIFF(END_DATE, START_DATE) + 1) BETWEEN 30 AND 89 THEN '30일 이상'
WHEN (DATEDIFF(END_DATE, START_DATE) + 1) >= 90 THEN '90일 이상'
ELSE '7일 미만'
END AS DURATION_TYPE
FROM CAR_RENTAL_COMPANY_CAR
JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY
USING(CAR_ID)
)
SELECT HISTORY_ID
, CASE WHEN T.DURATION_TYPE = '7일 미만' THEN (DAILY_FEE * DAY)
ELSE ROUND(DAILY_FEE * (100 - DISCOUNT_RATE) / 100 * DAY)
END AS "FEE"
FROM TEMP T
LEFT JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN AS P
ON T.CAR_TYPE = P.CAR_TYPE
AND T.DURATION_TYPE = P.DURATION_TYPE
WHERE T.CAR_TYPE = '트럭'
ORDER BY FEE DESC, HISTORY_ID DESC;
오늘의 TMI
집 앞 학교 공사 빨리 끝났으면...