LeetCode MySQL-1158. Market Analysis I

    LeetCode MySQL

    Write an SQL query to find for each user, the join date and the number of orders they made as a buyer in 2019.
    Return the result table in any order.

    寫一個 SQL Query來尋找每個用戶加入的日期,以及在2019年購買的數量。
    可任意排序結果。
    

    Table: Users

    +----------------+---------+
    | Column Name    | Type    |
    +----------------+---------+
    | user_id        | int     |
    | join_date      | date    |
    | favorite_brand | varchar |
    +----------------+---------+
    user_id is the primary key of this table.
    This table has the info of the users of an online shopping website where users can sell and buy items.
    

    Table: Orders

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | order_id      | int     |
    | order_date    | date    |
    | item_id       | int     |
    | buyer_id      | int     |
    | seller_id     | int     |
    +---------------+---------+
    order_id is the primary key of this table.
    item_id is a foreign key to the Items table.
    buyer_id and seller_id are foreign keys to the Users table.
    

    Table: Items

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | item_id       | int     |
    | item_brand    | varchar |
    +---------------+---------+
    item_id is the primary key of this table.
    

    Example 1:

    Input: 
    Users table:
    +---------+------------+----------------+
    | user_id | join_date  | favorite_brand |
    +---------+------------+----------------+
    | 1       | 2018-01-01 | Lenovo         |
    | 2       | 2018-02-09 | Samsung        |
    | 3       | 2018-01-19 | LG             |
    | 4       | 2018-05-21 | HP             |
    +---------+------------+----------------+
    Orders table:
    +----------+------------+---------+----------+-----------+
    | order_id | order_date | item_id | buyer_id | seller_id |
    +----------+------------+---------+----------+-----------+
    | 1        | 2019-08-01 | 4       | 1        | 2         |
    | 2        | 2018-08-02 | 2       | 1        | 3         |
    | 3        | 2019-08-03 | 3       | 2        | 3         |
    | 4        | 2018-08-04 | 1       | 4        | 2         |
    | 5        | 2018-08-04 | 1       | 3        | 4         |
    | 6        | 2019-08-05 | 2       | 2        | 4         |
    +----------+------------+---------+----------+-----------+
    Items table:
    +---------+------------+
    | item_id | item_brand |
    +---------+------------+
    | 1       | Samsung    |
    | 2       | Lenovo     |
    | 3       | LG         |
    | 4       | HP         |
    +---------+------------+
    Output: 
    +-----------+------------+----------------+
    | buyer_id  | join_date  | orders_in_2019 |
    +-----------+------------+----------------+
    | 1         | 2018-01-01 | 1              |
    | 2         | 2018-02-09 | 2              |
    | 3         | 2018-01-19 | 0              |
    | 4         | 2018-05-21 | 0              |
    +-----------+------------+----------------+
    

    Solution:
    1. 確認標題 u.user_id 為 buyer_id 。
    2. 確認標題 u.join_date 為 join_date。
    3. 確認標題 order_date 中日期年份為’2019’的次數加總,為 orders_in_2019。
    4. 來自 Users 的 table 為 u。
    5. 加入 Orders 的 table 為 o。
    6. 將 u.user_id 與 o.buyer_id 做連結。
    7. 以 u.user_id 為群組。

    Code.1:

    SELECT u.user_id AS buyer_id,
    	MAX(u.join_date) AS join_date,
        SUM(IF(o.order_date LIKE '2019-%', 1, 0)) AS orders_in_2019
        FROM Users AS u
    LEFT JOIN Orders AS o
    	ON u.user_id = o.buyer_id
    GROUP BY u.user_id;
    
    

    newOrders