SQL 코드카타
오프라인 / 온라인 판매 데이터 통합하기
ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성해주세요.
OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해주세요.
결과는 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순,
상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬해주세요.
- 2022년 3월 : DATA_FORMAT
- WHERE DATA_FORMAT
- USER_ID 값은 NULL : SELECT NULL
- 정렬 : ORDER BY
SELECT DATE_FORMAT(SALES_DATE,'%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE 1=1
AND SALES_DATE LIKE '2022-03%'
UNION ALL
SELECT SALES_DATE, PRODUCT_ID, NULL, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE 1=1
AND SALES_DATE LIKE '2022-03%'
ORDER BY 1,2,3;
조건에 부합하는 중고거래 댓글 조회하기
USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게
시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요.
결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬
- 2022년 10월 : DATE_FORMAT
- 2022년 10월 : WHERE
- 오름차순 정렬 : ORDER BY
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 B
JOIN USED_GOODS_REPLY R ON B.BOARD_ID = R.BOARD_ID
WHERE DATE_FORMAT(B.CREATED_DATE, '%Y-%m') = '2022-10'
ORDER BY R.CREATED_DATE, B.TITLE;
입양 시각 구하기(2)
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지,
각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬
- 0시부터 23시 : WITH RECURSIVE CTE
- 몇 시에 입양이 가장 활발하게 일어나는지 : JOIN
- 각 시간대별로 입양이 몇 건 : COUNT , LEFT JOIN
- 정렬 : ORDER BY
WITH RECURSIVE CTE AS(
SELECT 0 AS NUM
UNION ALL
SELECT NUM+1 FROM CTE
WHERE NUM < 23
)
SELECT CTE.NUM AS HOUR, IFNULL(ANIMAL_OUTS.COUNT, 0) AS COUNT
FROM CTE LEFT JOIN (
SELECT HOUR(DATETIME) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
) AS ANIMAL_OUTS ON CTE.NUM = ANIMAL_OUTS.HOUR
ORDER BY HOUR;
WITH RECURSIVE
공통 테이블 표현식을 정의할 때 사용
재귀적인 CTE 생성
CTE
임시적으로 정의된 테이블로, 복잡한 쿼리를 단순화하고 가독성을 향상시키는 데 사용
계층 구조 데이터나 순환적인 데이터에 유용