返回介绍

solution / 1400-1499 / 1407.Top Travellers / README_EN

发布于 2024-06-17 01:03:20 字数 3311 浏览 0 评论 0 收藏 0

1407. Top Travellers

中文文档

Description

Table: Users

+---------------+---------+
| Column Name   | Type  |
+---------------+---------+
| id      | int   |
| name      | varchar |
+---------------+---------+
id is the column with unique values 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 column with unique values for this table.
user_id is the id of the user who traveled the distance "distance".

 

Write a solution 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.

The result format is in the following example.

 

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.

Solutions

Solution 1: LEFT JOIN + GROUP BY

We can use a left join to join the Users table with the Rides table on the condition of user id, and then group by user id to calculate the travel distance for each user. Note that if a user has no travel records, the travel distance is $0$.

# Write your MySQL query statement below
SELECT name, IFNULL(SUM(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 2 DESC, 1;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文