美文网首页
Leetcode1407. 排名靠前的旅行者(简单)

Leetcode1407. 排名靠前的旅行者(简单)

作者: kaka22 | 来源:发表于2020-07-23 09:56 被阅读0次

    题目
    表单: Users

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | id            | int     |
    | name          | varchar |
    +---------------+---------+
    

    id 是该表单主键.
    name 是用户名字.
    表单: Rides

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | id            | int     |
    | user_id       | int     |
    | distance      | int     |
    +---------------+---------+
    

    id 是该表单主键.
    user_id 是本次行程的用户的 id, 而该用户此次行程距离为 distance.
    写一段 SQL , 报告每个用户的旅行距离.

    返回的结果表单, 以 travelled_distance 降序排列,
    如果有两个或者更多的用户旅行了相同的距离, 那么再以 name 升序排列.

    查询结果格式, 如下例所示.

    Users 表单:

    +------+-----------+
    | id   | name      |
    +------+-----------+
    | 1    | Alice     |
    | 2    | Bob       |
    | 3    | Alex      |
    | 4    | Donald    |
    | 7    | Lee       |
    | 13   | Jonathan  |
    | 19   | Elvis     |
    +------+-----------+
    

    Rides 表单:

    +------+----------+----------+
    | 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      |
    +------+----------+----------+
    

    Result 表单:

    +----------+--------------------+
    | name     | travelled_distance |
    +----------+--------------------+
    | Elvis    | 450                |
    | Lee      | 450                |
    | Bob      | 317                |
    | Jonathan | 312                |
    | Alex     | 222                |
    | Alice    | 120                |
    | Donald   | 0                  |
    +----------+--------------------+
    

    Elvis 和 Lee 旅行了 450 英里, Elvis 是排名靠前的旅行者,
    因为他的名字在字母表上的排序比 Lee 更小.
    Bob, Jonathan, Alex 和 Alice 只有一次行程,
    我们只按此次行程的全部距离对他们排序.
    Donald 没有任何行程, 他的旅行距离为 0.

    解答
    两表连接 左连接

    select U.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.name
    order by travelled_distance desc, R.name asc;
    

    类似的

    using等价于join操作中的on,例如a和b根据id字段关联,那么以下等价
    using(id)
    on a.id=b.id

    select name, ifnull(dis,0) travelled_distance from
    (
        select user_id id, sum(distance) dis
        from Rides
        group by user_id
    ) t right join Users
    using(id)
    order by travelled_distance desc, name
    

    相关文章

      网友评论

          本文标题:Leetcode1407. 排名靠前的旅行者(简单)

          本文链接:https://www.haomeiwen.com/subject/ftsclktx.html