LeetCode MySQL-1407. Top Travellers

    LeetCode MySQL

    Write an SQL query to report the distance traveled by each user.
    Return the result table ordered by travelled_distance in descending order, if two or more users traveled the same distance, order them by their name in ascending order.

    寫一個 SQL Query來報告每個使用者走過的距離。
    以 travelled_distanc 做降冪排序結果,如果兩個或多個用戶有相同距離,則按照平自升冪排序。
    

    Table: Users

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | id            | int     |
    | name          | varchar |
    +---------------+---------+
    id is the primary key for this table.
    name is the name of the user.
    

    Table: Rides

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | id            | int     |
    | user_id       | int     |
    | distance      | int     |
    +---------------+---------+
    id is the primary key for this table.
    user_id is the id of the user who traveled the distance "distance".
    

    Example 1:

    Input: 
    Users table:
    +------+-----------+
    | id   | name      |
    +------+-----------+
    | 1    | Alice     |
    | 2    | Bob       |
    | 3    | Alex      |
    | 4    | Donald    |
    | 7    | Lee       |
    | 13   | Jonathan  |
    | 19   | Elvis     |
    +------+-----------+
    Rides table:
    +------+----------+----------+
    | id   | user_id  | distance |
    +------+----------+----------+
    | 1    | 1        | 120      |
    | 2    | 2        | 317      |
    | 3    | 3        | 222      |
    | 4    | 7        | 100      |
    | 5    | 13       | 312      |
    | 6    | 19       | 50       |
    | 7    | 7        | 120      |
    | 8    | 19       | 400      |
    | 9    | 7        | 230      |
    +------+----------+----------+
    Output: 
    +----------+--------------------+
    | name     | travelled_distance |
    +----------+--------------------+
    | Elvis    | 450                |
    | Lee      | 450                |
    | Bob      | 317                |
    | Jonathan | 312                |
    | Alex     | 222                |
    | Alice    | 120                |
    | Donald   | 0                  |
    +----------+--------------------+
    Explanation: 
    Elvis and Lee traveled 450 miles, Elvis is the top traveler as his name is alphabetically smaller than Lee.
    Bob, Jonathan, Alex, and Alice have only one ride and we just order them by the total distances of the ride.
    Donald did not have any rides, the distance traveled by him is 0.
    

    Solution:
    1. 選擇標題 u.name 為 name。
    2. 選擇標題 travelled_distance 為 distance的加總,且 NULL 為0。
    3. 來自 Users 的 table。
    4. 連結 Rides 的 table,且 u.id = r.user_id。
    5. 以 n.name 為群組。
    6. 以 travelled_distance 為降冪排序,如相同則以 u.name 作升冪排序。

    Code1:

    SELECT u.name AS name,
    	IFNULL(SUM(r.distance), 0) AS travelled_distance
    FROM Users AS u
    LEFT JOIN Rides AS r
    	ON u.id = r.user_id
    GROUP BY u.id
    ORDER BY travelled_distance DESC, u.name ASC;
    

    newTravellers