【力扣白嫖日记】SQL

前言

练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。

今日题目:

1407.排名靠前的旅行者
表:Users

列名 类型
id int
name varchar

id 是该表中具有唯一值的列。name 是用户名字。

表:Rides

列名 类型
id int
user_id int
distance int

id 是该表中具有唯一值的列。user_id 是本次行程的用户的 id, 而该用户此次行程距离为 distance 。


我那不值一提的想法:

首先梳理表内容,题干给了两张表,第一张用户表,记录了用户id和姓名,第二张旅行表,记录了id,和用户id和距离,其中用户id和第一张表的id一样。其次分析需求,需要报告每个用户的旅行距离,并且有不一样的逻辑判断,那么我们就先满足距离,在满足名字,就是把距离放在order by 的前面一个值。初次之外,对于没有距离的用户,我们还需要显示出来,并标识为0,这里我们使用ifnull判断,如果是空值,择改成0。

我一开是是用name去分组的,但是如果用name分组就忽略了名字一样的情况,就会出现错误,我们应该用表的主键唯一列id进行分组,也就是order by u.id

select u.name,ifnull(sum(r.distance),0) as travelled_distance
from Users u 
left join Rides r 
on u.id = r.user_id
group by u.name
order by sum(r.distance) desc,u.name

也就是这样:

select u.name,ifnull(sum(r.distance),0) as travelled_distance
from Users u 
left join Rides r 
on u.id = r.user_id
group by u.id
order by sum(r.distance) desc,u.name

结果:

在这里插入图片描述


总结:

能运行就行。


相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-03 11:32:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-03 11:32:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-03 11:32:01       87 阅读
  4. Python语言-面向对象

    2024-02-03 11:32:01       96 阅读

热门阅读

  1. Redis常用数据类型--List

    2024-02-03 11:32:01       46 阅读
  2. 大端和小端模式介绍

    2024-02-03 11:32:01       56 阅读
  3. Ubuntu-docker下的MySQL部署(持续更新)

    2024-02-03 11:32:01       52 阅读
  4. LeetCode 24天

    2024-02-03 11:32:01       57 阅读
  5. 【计算机安全】相关整理

    2024-02-03 11:32:01       52 阅读
  6. URL重写

    URL重写

    2024-02-03 11:32:01      55 阅读
  7. L1-054 福到了

    2024-02-03 11:32:01       52 阅读