본문 바로가기

SQL/LeetCode

[SQL] Market Analysis I(LeetCode/Oracle)

안녕하세요!

 

이번 포스팅은 LeetCode에 있는 Market Analysis I문제를 OracleDB로 풀어보려고 합니다!

 

(모든 문제는 Oracle로 풀이하겠습니다.)

 

1. 문제 링크 : https://leetcode.com/problems/market-analysis-i/description/

 

2. 문제

Column name Type
user_id int
join_date date
favorite_brand varchar
Column name Type
order_id int
order_date date
item_id int
buyer_id int
seller_id int
[문제] Write a solution to find for each user, the join date and the number of orders they made as a buyer in 2019.

2019년 구매자로 참여한 날짜 및 주문 수를 조회하는 문제입니다.

 

3. 제출 쿼리 및 설명

 

1) ORDERS 테이블에서 2019년에 주문한 모든 내역을 조회합니다.

SELECT *
FROM ORDERS
WHERE EXTRACT(YEAR FROM ORDER_DATE) = 2019

2) 1번 쿼리와 USERS 테이블을 조인하는데, 2019년에 주문하지 않은 사람들도 모두 나올 수 있도록 LEFT JOIN 합니다.

FROM USERS U,(
  SELECT *
  FROM ORDERS
  WHERE EXTRACT(YEAR FROM ORDER_DATE) = 2019
) O_19
WHERE U.USER_ID = O_19.BUYER_ID(+)

최종) 구매자와 구매 날짜 별로 주문수를 조회합니다. 이 때, 2019년에 주문을 안했다면 NULL로 표시되는데 NVL 함수를 통해 0으로 바꿔줍니다.

SELECT 
  U.USER_ID AS BUYER_ID, 
  TO_CHAR(JOIN_DATE, 'YYYY-MM-DD') AS JOIN_DATE, 
  NVL(COUNT(BUYER_ID), 0) AS ORDERS_IN_2019
FROM USERS U,(
  SELECT *
  FROM ORDERS
  WHERE EXTRACT(YEAR FROM ORDER_DATE) = 2019
) O_19
WHERE U.USER_ID = O_19.BUYER_ID(+)
GROUP BY U.USER_ID, U.JOIN_DATE
;