Mysql每日一题(行程与用户,困难※)

今天给大家分享一个截止到目前位置,我遇到最难的一道mysql题目,非常建议大家亲手做一遍

完整代码如下,这道题的主要难点是它有两个外键,以前没遇到过,我也没当回事,分享一下错误经验哈

当时我写的where判断条件是

where Users.banned="No" and(Trips.client_id=Users.users_id or Trips.driver_id=Users.users_id)

当时我就认为和下面代码写的

from Trips as T

inner join Users as U1 on T.client_id=U1.users_id

inner join Users as U2 on T.driver_id=U2.users_id

where U1.banned="No" and U2.banned="No"一样

我觉得系统应该会在我的系统应该像循环一样再判断完Trips.client_id=Users.users_id or 后,帮我分别判断一下

Trips.client_id=Users.users_id的时候Users.banned="No"?

Trips.driver_id=Users.users_id的时候Users.banned="No"?

结果并不会,给大家看一些官方题解,其中就介绍了这个问题

反正我是狠狠的跳进了这个设计好的坑里,一直爬不出来,知道看了题解,这个题目我觉得很好,以后我希望我会经常拿出来看看。

复制代码
select T2.request_at as "Day",ifnull(round(T1.c/T2.c,2),0) as "Cancellation Rate"
from (select T.request_at,ifnull(count(*),0) as c
from Trips as T 
inner join Users as U1 on T.client_id=U1.users_id
inner join Users as U2 on T.driver_id=U2.users_id
where U1.banned="No" and U2.banned="No"
group by T.request_at) as T2 left join 
(select T.request_at,ifnull(count(*),0) as c
from Trips as T 
inner join Users as U1 on T.client_id=U1.users_id
inner join Users as U2 on T.driver_id=U2.users_id
where U1.banned="No" and U2.banned="No" and T.status Like "ca%"
group by T.request_at) as T1 on T1.request_at=T2.request_at;
相关推荐
敲代码的瓦龙4 分钟前
操作系统?Android与Linux!!!
android·linux·运维
Amnesia0_011 分钟前
MYSQL表的约束
数据库·mysql
C137的本贾尼12 分钟前
锁的分类:表锁、行锁、页锁与意向锁
数据库
Full Stack Developme13 分钟前
SQL 执行顺序 及 全部关键字
数据库·sql
专注API从业者20 分钟前
电商选品效率翻倍!基于 Open Claw + 淘宝商品 API 实现自动化监控选品(附完整可运行代码)
大数据·运维·数据结构·数据库·自动化
C137的本贾尼21 分钟前
InnoDB 内存架构:Buffer Pool、Change Buffer 与 Log Buffer
数据库·oracle·架构
DigitalOcean27 分钟前
深度评测:RAG 向量数据库选型指南 —— OpenSearch、Weaviate、pgvector 怎么选?
数据库·ai编程
云计算磊哥@29 分钟前
运维开发宝典025-MySQL01数据库的安装和配置
运维·数据库·运维开发
愚公搬代码33 分钟前
【愚公系列】《移动端AI应用开发》017-Android端应用开发(网络通信与API集成)
android·人工智能
say_fall42 分钟前
可编程中断控制器8259A工作方式超详细解析
android·开发语言·学习·硬件架构·硬件工程