【力扣白嫖日记】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

sql 复制代码
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

也就是这样:

sql 复制代码
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

结果:


总结:

能运行就行。


相关推荐
MonolithIoT1 小时前
实战方案|设备备件无人值守仓库:连续化产线运维备件 7×24 小时数字化管控方案
运维·网络·数据库
瞬间&永恒~1 小时前
【MySQL】4-6:在同一个主机上使用 systemd 运行多个 MySQL服务器
服务器·数据库·mysql
心机之蛙qee2 小时前
Redis的主从、哨兵及集群
数据库·redis·缓存
gwf2162 小时前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
AAA@峥2 小时前
CentOS7 源码编译安装 MySQL5.7|SQL 基础操作 + 备份恢复完整实战
运维·数据库·sql·centos
xixingzhe22 小时前
spring ai简单使用skills
数据库·人工智能·spring
Fu2067213 小时前
数据库第三次作业
数据库
AI多Agent协作实战派4 小时前
AI多Agent协作系统实战(二十三):Agent读HEARTBEAT.md不读AGENTS.md——openclaw的文件加载之谜
前端·数据库·人工智能·uni-app
jun_bai4 小时前
postgresql数据库免安装版安装到windows系统
数据库·postgresql
weixin_538601974 小时前
智能体测开Day33
数据库·oracle