夏尔勒克莱尔 2019-06-11 16:50 采纳率: 85.7%
浏览 241
已采纳

请问这题用 SQL server 怎么解?

假设以下为嘀嘀打车的行程表 Trips,Id 是唯一键,Client_Id、Driver_Id 分别是乘客和司机的编号,Status 的三种状态分别意思为 完成、乘客取消、司机取消
+----+-----------+-----------+---------+--------------------+----------+
| Id | Client_Id | Driver_Id | City_Id | Status |Request_at|
+----+-----------+-----------+---------+--------------------+----------+
| 1 | 1 | 10 | 1 | completed |2018-10-01|
| 2 | 2 | 11 | 1 | cancelled_by_driver |2018-10-01|
| 3 | 3 | 12 | 6 | completed |2018-10-01|
| 4 | 4 | 13 | 6 | cancelled_by_client |2018-10-01|
| 5 | 1 | 10 | 1 | completed |2018-10-02|
| 6 | 2 | 11 | 6 | completed |2018-10-02|
| 7 | 3 | 12 | 6 | completed |2018-10-02|
| 8 | 2 | 12 | 12 | completed |2018-10-03|
| 9 | 3 | 10 | 12 | completed |2018-10-03|
|10 | 4 | 13 | 12 | cancelled_by_driver |2018-10-03|
+----+-----------+-----------+---------+--------------------+----------+

Users 表存所有用户。每个用户有唯一键 Users_Id。Banned 表示这个用户是否被禁止,Role 则是一个表示 乘客、司机 的类型。
+----------+--------+--------+
| Users_Id | Banned | Role |
+----------+--------+--------+
| 1 | No | client |
| 2 | Yes | client |
| 3 | No | client |
| 4 | No | client |
| 10 | No | driver |
| 11 | No | driver |
| 12 | No | driver |
| 13 | No | driver |
+----------+--------+--------+

写一段 SQL 语句查出 2018年10月1日 至 2018年10月3日 期间非禁止乘客的取消率。基于上表,你的 SQL 语句应返回如下结果,结果保留两位小数。
+------------+-------------------+
| Day | CancellationRate |
+------------+-------------------+
| 2018-10-01 | 0.33 |
| 2018-10-02 | 0.00 |
| 2018-10-03 | 0.50 |
+------------+-------------------+

  • 写回答

1条回答 默认 最新

  • m0_38123164 2019-06-11 17:30
    关注

    Select (a.d/b.d) 取精度自己查一下
    (Select d=Request_at,all=count(1) from Trips t where datadiff(d,Request_at,'2018-10-01')<=0 and datadiff(d,Request_at,'2018-10-03')>=0 goup by Request_at) as a
    inner join
    (Select d=t.Request_at,all=count(1) from Trips t
    inner join Users u on u.Banned = No and u.Users_Id = t.Client_Id
    where datadiff(d,t.Request_at,'2018-10-01')<=0 and datadiff(d,t.Request_at,'2018-10-03')>=0 goup by Request_at) as b
    on a.d=b.d

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    悬赏问题

    • ¥20 win10商店接入问题
    • ¥15 java 这种树形框吗
    • ¥40 找同学帮敲Python代码
    • ¥15 MYSQL 订单的商品明细重复计算问题
    • ¥15 微信实时共享位置修改
    • ¥100 TG的session协议号转成直登号号后客户端登录几分钟后自动退出设备
    • ¥50 共模反馈回路的小信号增益
    • ¥15 arduino ssd1306函数与tone函数放歌代码不兼容问题
    • ¥70 0.96版本hbase的row_key里含有双引号,无法deleteall
    • ¥15 诊断性META分析合并效能的检验