LeetCode MySQL-1587. Bank Account Summary II

    LeetCode MySQL

    Write an SQL query to report the name and balance of users with a balance higher than 10000. The balance of an account is equal to the sum of the amounts of all transactions involving that account.
    Return the result table in any order.

    寫一個 SQL Query來報告名字和使用者餘額大於10000。
    且餘額帳戶為所有帳戶的交易金額加總。
    可任意排序結果。
    

    Table: Users

    +--------------+---------+
    | Column Name  | Type    |
    +--------------+---------+
    | account      | int     |
    | name         | varchar |
    +--------------+---------+
    account is the primary key for this table.
    Each row of this table contains the account number of each user in the bank.
    There will be no two users having the same name in the table.
    

    Table: Transactions

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | trans_id      | int     |
    | account       | int     |
    | amount        | int     |
    | transacted_on | date    |
    +---------------+---------+
    trans_id is the primary key for this table.
    Each row of this table contains all changes made to all accounts.
    amount is positive if the user received money and negative if they transferred money.
    All accounts start with a balance of 0.
    

    Example 1:

    Input: 
    Users table:
    +------------+--------------+
    | account    | name         |
    +------------+--------------+
    | 900001     | Alice        |
    | 900002     | Bob          |
    | 900003     | Charlie      |
    +------------+--------------+
    Transactions table:
    +------------+------------+------------+---------------+
    | trans_id   | account    | amount     | transacted_on |
    +------------+------------+------------+---------------+
    | 1          | 900001     | 7000       |  2020-08-01   |
    | 2          | 900001     | 7000       |  2020-09-01   |
    | 3          | 900001     | -3000      |  2020-09-02   |
    | 4          | 900002     | 1000       |  2020-09-12   |
    | 5          | 900003     | 6000       |  2020-08-07   |
    | 6          | 900003     | 6000       |  2020-09-07   |
    | 7          | 900003     | -4000      |  2020-09-11   |
    +------------+------------+------------+---------------+
    Output: 
    +------------+------------+
    | name       | balance    |
    +------------+------------+
    | Alice      | 11000      |
    +------------+------------+
    Explanation: 
    Alice's balance is (7000 + 7000 - 3000) = 11000.
    Bob's balance is 1000.
    Charlie's balance is (6000 + 6000 - 4000) = 8000.
    

    Solution:
    1. 選擇標題 u.name 為 name。
    2. 選擇標題 將 t.amount 加總後,為 balance
    3. 來自 Users 的 table 為 u。
    4. 加入 Transactions 的 table 為 t。
    5. 且將 u.account 與 t.account 做連結。
    6. 找出 balance 大於等於 10000。

    Code.1:

    SELECT u.name AS name,
    	SUM(t.amount) AS balance
        FROM Users AS u
        LEFT JOIN Transactions AS t
    		ON u.account = t.account
        GROUP BY u.name
        HAVING balance > 10000;
    

    newUsers