71. 오프라인/온라인 판매 데이터 통합하기

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/131537

정답 코드:

SELECT 
    DATE_FORMAT(SALES_DATE, "%Y-%m-%d") AS SALES_DATE, 
    PRODUCT_ID, 
    USER_ID, 
    SALES_AMOUNT
FROM ONLINE_SALE 
WHERE YEAR(SALES_DATE) = 2022 AND MONTH(SALES_DATE) = 3
UNION ALL
SELECT 
    DATE_FORMAT(SALES_DATE, "%Y-%m-%d") AS SALES_DATE, 
    PRODUCT_ID, 
    NULL AS USER_ID, 
    SALES_AMOUNT
FROM OFFLINE_SALE 
WHERE YEAR(SALES_DATE) = 2022 AND MONTH(SALES_DATE) = 3
ORDER BY SALES_DATE ASC, PRODUCT_ID ASC, USER_ID ASC

 

문제 풀이때 했던 생각.

# 2022년 3월의 오프라인/온라인 상품 판매 데이터의
# 판매 날짜, 상품ID, 유저ID, 판매량
# OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시
# 판매일을 기준으로 오름차순 정렬, 상품 ID를 기준으로 오름차순, 유저 ID를 기준으로 오름차순 정렬

 


72. 조건에 부합하는 중고거래 댓글 조회하기

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/164673

정답 코드:

SELECT
    ub.TITLE, 
    ub.BOARD_ID, 
    ur.REPLY_ID, 
    ur.WRITER_ID, 
    ur.CONTENTS, 
    DATE_FORMAT(ur.CREATED_DATE, "%Y-%m-%d") AS CREATED_DATE
FROM USED_GOODS_BOARD ub
INNER JOIN USED_GOODS_REPLY ur
on ub.BOARD_ID = ur.BOARD_ID
where YEAR(ub.CREATED_DATE) = 2022 and month(ub.CREATED_DATE) = 10
order by ur.CREATED_DATE ASC, ub.TITLE ASC

문제 풀이때 했던 생각.

# 2022년 10월에 작성된 게시글
# 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회
# 댓글 작성일을 기준으로 오름차순 정렬, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬

 


73. 입양 시각 구하기(2)

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/59413

정답 코드: 

WITH RECURSIVE hours AS (
    SELECT 0 AS HOUR
    UNION ALL
    SELECT HOUR + 1
    FROM hours
    WHERE HOUR < 23
)
SELECT
    h.HOUR,
    COUNT(a.ANIMAL_ID) AS COUNT
FROM hours h
LEFT JOIN ANIMAL_OUTS a
  ON h.HOUR = HOUR(a.DATETIME)
GROUP BY h.HOUR
ORDER BY h.HOUR;

문제 풀이때 했던 생각.

# 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회
# 결과는 시간대 순으로 정렬


무엇이 잘못되었나?

SELECT HOUR(DATETIME) as HOUR, COUNT(*)
FROM ANIMAL_OUTS 
GROUP BY HOUR(DATETIME)
시간대별로 입양이 몇 건이나 발생했는지 조회할수 있었으나, 테이블 내에 있는 시간대만 조회가 가능했다.


해결법

이 해결책에 대한 것을 알아보다 WITH RECURSIVE에 대해 알게되었고
SQL에서 자기 자신을 다시 참조하면서 데이터를 단계적으로 만들어내는 문법이란것을 알게되었다.

0~N 숫자 생성, 날짜 범위 생성하는데 있어서 유용하단것을 알게되었으나, 제대로된 사용법을 익히진 못했기 떄문에
SQL 공부내용에 추가

 

'E.코드카타 > Level 5' 카테고리의 다른 글

코드카타 Level.5 76  (0) 2026.02.06
코드카타 Level.5 74, 75  (0) 2026.02.05
코드카타 Level.5 68~70  (0) 2026.01.19

+ Recent posts