力扣Trips and Users题提交报Table 'test.users_id'不存在错误问询
错误原因及修复方案
直接报错触发原因
你第二个子查询中写错了表名:join Users_Id u4 on t1.Driver_Id = u4.Users_Id,正确的用户表名为Users,你误写为Users_Id,系统找不到该表时会默认拼接当前默认数据库前缀test,所以抛出Table 'test.users_id' doesn't exist的报错,并非你主动引用了test库的表。
其他存在的语法/逻辑错误
- 拼写错误:
- 四舍五入函数
round被误写为around,计数函数count被误写为coount - 客户端ID字段
Client_Id被误写为Clinet_Id - 第二个子查询中Trips表的别名是
t2,但后续关联时错误使用了不存在的别名t1 - 外层查询引用了不存在的别名
t1,子查询输出的别名只有s1和s2
- 四舍五入函数
- 逻辑错误:
- 第一个子查询的where条件没有加括号区分优先级,
u1.Banned = 'No' and u2.Banned = 'No' and t1.Status = 'cancelled_by_driver' or t1.Status = 'cancelled_by_client'的执行逻辑会变为「满足司机乘客都未封禁且司机取消,或者只要是乘客取消不管是否封禁都算」,不符合合法订单的统计要求 - 你用笛卡尔积关联s1和s2两个子查询,没有关联条件,会导致数据大量重复,计算出的比例完全错误
- 第一个子查询的where条件没有加括号区分优先级,
正确实现参考
SELECT Request_at AS `Day`, ROUND( SUM(CASE WHEN Status LIKE 'cancelled%' THEN 1 ELSE 0 END) / COUNT(*), 2 ) AS `Cancellation Rate` FROM Trips t JOIN Users u1 ON t.Client_Id = u1.Users_Id AND u1.Banned = 'No' JOIN Users u2 ON t.Driver_Id = u2.Users_Id AND u2.Banned = 'No' WHERE Request_at BETWEEN '2013-10-01' AND '2013-10-03' GROUP BY Request_at;
内容的提问来源于stack exchange,提问作者biao zhu
相关产品推荐
相关产品推荐

