[SQL] 20240122

김예지·2024년 1월 22일

SQL 풀이

목록 보기
1/26
post-thumbnail

*프로그래머스 SQL 문제 풀이입니다.


문제 1: 조건에 부합하는 중고거래 댓글 조회하기

📃 문제 1 링크

🔎 풀이 포인트

  • 날짜 포맷 함수
  • 조건 : 2022년 10월에 작성된 게시글
  • 정렬 : 댓글 작성일 기준 오름차순, 게시글 제목 기준 오름차순
  • output columns: 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일

제출 답안

SELECT A.TITLE, A.BOARD_ID, B.REPLY_ID, B.WRITER_ID, B.CONTENTS, DATE_FORMAT(B.CREATED_DATE, '%Y-%m-%d')
FROM USED_GOODS_BOARD A, USED_GOODS_REPLY B
WHERE A.BOARD_ID = B.BOARD_ID
	AND A.CREATED_DATE BETWEEN '2022-10-01' AND '2022-10-31'
ORDER BY B.CREATED_DATE, A.TITLE; 

(+) 날짜 포맷 함수 : DATE_FORMAT

구분기호역할
%Y4자리 년도
%y2자리 년도
%M긴 월(영문)
%b짧은 월(영문)
%W긴 요일 이름(영문)
%a짧은 요일 이름(영문)
%i
%Thh:mm:SS
%m숫자 월(01, 02, 10, ...)
%c숫자 월(1, 2, 10, ...)
%d일(01, 02, 10, ...)
%e일(1, 2, 10, ...)
%l시간(12h)
%H시간(24h)
%rhh:mm:ss AM, PM
%S

문제 2 : 재구매가 일어난 상품과 회원 리스트 구하기

📃 문제 2 링크

🔎 풀이 포인트

  • 재구매 여부를 어떻게 찾을 것인가?
  • 조건 : 동일한 회원이 동일한 상품을 재구매
  • 정렬 : 회원 ID 기준 오름차순, 상품 ID 기준 내림차순
  • output columns : 회원 ID, 상품 ID

제출 답안

SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID, PRODUCT_ID DESC ; 

문제 3 : 오프라인/온라인 판매 데이터 통합하기

📃 문제 3 링크

🔎 풀이 포인트

  • 날짜 조회
  • 조건 : 2022년 3월에 판매된 상품, offline_sale 테이블의 user_id는 NULL로 표시
  • 정렬 : 판매일 기준 오름차순, 상품ID 기준 오름차순, 유저ID 기준 오름차순
  • output columns : 판매 날짜, 상품ID, 유저ID, 판매량

제출 답안

SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') 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') SALES_DATE,
        PRODUCT_ID, 
        NULL AS USER_ID,
        SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE BETWEEN '2022-03-01' AND '2022-03-31'

ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;

(+) NULL 값 치환하기

IFNULL

해당 column의 값이 NULL 반환 시, 다른 값으로 출력

사용법
SELECT IFNULL(column 이름, 'Null일 경우 대체할 값') FROM 테이블명; 
IF + IS NULL로 IFNULL 처리하기
SELECT IF(IS NULL(column 이름), "null일 경우 대체할 값, column 이름)
FROM column 이름

CASE

해당 column 값을 조건식을 통해 판단 후, 조건에 맞게 값 변환

사용법
CASE
	WHEN 조건식1 THEN1
    WHEN 조건식2 THEN2
    ...
    ELSE 조건에 맞는 경우가 없는 경우 실행
END

COALESCE

지정한 표현식들 중에 NULL이 아닌 첫 번째 값을 반환
!모든 DBMS 사용 가능

profile
넓고 얕게? 좁고 깊게?

0개의 댓글