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

结果:


总结:

能运行就行。


相关推荐
运维小斌几秒前
麒麟 V10 部署 OceanBase:故障速查与验收清单
linux·数据库·oceanbase·麒麟
LMT流氓兔12 分钟前
第五单元——第9课:防止同一次操作重复执行
java·服务器·数据库·算法·ai·langchain
春弦_18 分钟前
LeetCode Hot 100 刷题笔记
笔记·leetcode·哈希算法
code2cat24 分钟前
Java高级篇之JDBC:连接数据库,完成查询、更新与事务
java·开发语言·数据库
*长铗归来*27 分钟前
MySQL新学知识(三)MySQL 事件(EVENT)
数据库·mysql
Warolitbos1 小时前
【数据库】SQL进阶15题,窗口函数/索引/事务一页速查
数据库·sql·学习·mysql·面试
BioRunYiXue1 小时前
使用docker分析高通量测序数据
java·数据库·人工智能·spring cloud·docker·tomcat·html
卓豪终端管理1 小时前
300 台终端补丁推送完成 ≠ 漏洞关闭:补丁稽核闭环的状态机与工程落点
网络·数据库·php
l1t1 小时前
DeepSeek总结的PostgreSQL 中的二进制只读副本,第三部分
数据库·postgresql
从零数据分析2 小时前
零基础学SQL 23:和上月比总对不上?LAG/LEAD 一步取出上一次(附 4 个模板)
java·数据库·sql·mysql·oracle·sqlite·database