안녕하세요!
이번 포스팅은 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
;
'SQL > LeetCode' 카테고리의 다른 글
| [SQL] Immediate Food Delivery II(LeetCode/Oracle) (0) | 2023.10.20 |
|---|---|
| [SQL] Product Price at a Given Date(LeetCode/Oracle) (0) | 2023.10.19 |
| [SQL] Article Views I(LeetCode/Oracle) (0) | 2023.10.19 |
| [SQL] User Activity for the Past 30 Days I(LeetCode/Oracle) (0) | 2023.10.19 |
| [SQL] Sales Analysis III(LeetCode/Oracle) (0) | 2023.10.19 |