erDiagram
Users {
int user_id PK
date join_date
varchar favorite_brand
}
Orders {
int order_id PK
date order_date
int item_id FK
int buyer_id FK
int seller_id FK
}
Items {
int item_id PK
varchar item_brand
}
Orders ||--o{ Users : "buyer_id"
Orders ||--o{ Users : "seller_id"
Orders ||--o{ Items : "item_id"
목표
문제 풀이
MySQL
-- Solution 1
WITH ORDER_2019 AS (
SELECT BUYER_ID, COUNT(*) AS ORDERS_IN_2019
FROM ORDERS
WHERE YEAR(ORDER_DATE) = 2019
-- WHERE ORDER_DATE BETWEEN '2019-01-01' AND '2019-12-31'
GROUP BY BUYER_ID
)
SELECT
U.USER_ID AS BUYER_ID,
U.JOIN_DATE,
COALESCE(O.ORDERS_IN_2019, 0) AS ORDERS_IN_2019
FROM USERS U
LEFT JOIN ORDER_2019 O ON U.USER_ID = O.BUYER_ID
Solution 1
year같은 경우 새로 변수를 파생하는거라 order_date에 인덱스가 부여되어있다면, 인덱스의 사용 효과가 없다고 한다.
댓글