• 1635. Hopper 公司查询 I


    SQL架构

    表: Drivers

    +-------------+---------+
    | Column Name | Type    |
    +-------------+---------+
    | driver_id   | int     |
    | join_date   | date    |
    +-------------+---------+
    driver_id是该表的主键。
    该表的每一行均包含驾驶员的ID以及他们加入Hopper公司的日期。
    

    表: Rides

    +--------------+---------+
    | Column Name  | Type    |
    +--------------+---------+
    | ride_id      | int     |
    | user_id      | int     |
    | requested_at | date    |
    +--------------+---------+
    ride_id是该表的主键。
    该表的每一行均包含行程ID(ride_id),用户ID(user_id)以及该行程的日期(requested_at)。
    该表中可能有一些不被接受的乘车请求。
    

    表: AcceptedRides

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | ride_id       | int     |
    | driver_id     | int     |
    | ride_distance | int     |
    | ride_duration | int     |
    +---------------+---------+
    ride_id是该表的主键。
    该表的每一行都包含已接受的行程信息。
    表中的行程信息都在“Rides”表中存在。
    

    编写SQL查询以报告2020年每个月的以下统计信息:

    • 截至某月底,当前在Hopper公司工作的驾驶员数量(active_drivers)。
    • 该月接受的乘车次数(accepted_rides)。

    返回按month 升序排列的结果表,其中month 是月份的数字(一月是1,二月是2,依此类推)。

    查询结果格式如下例所示。

    示例 1:

    输入:
    表 Drivers:
    +-----------+------------+
    | driver_id | join_date  |
    +-----------+------------+
    | 10        | 2019-12-10 |
    | 8         | 2020-1-13  |
    | 5         | 2020-2-16  |
    | 7         | 2020-3-8   |
    | 4         | 2020-5-17  |
    | 1         | 2020-10-24 |
    | 6         | 2021-1-5   |
    +-----------+------------+
    表 Rides:
    +---------+---------+--------------+
    | ride_id | user_id | requested_at |
    +---------+---------+--------------+
    | 6       | 75      | 2019-12-9    |
    | 1       | 54      | 2020-2-9     |
    | 10      | 63      | 2020-3-4     |
    | 19      | 39      | 2020-4-6     |
    | 3       | 41      | 2020-6-3     |
    | 13      | 52      | 2020-6-22    |
    | 7       | 69      | 2020-7-16    |
    | 17      | 70      | 2020-8-25    |
    | 20      | 81      | 2020-11-2    |
    | 5       | 57      | 2020-11-9    |
    | 2       | 42      | 2020-12-9    |
    | 11      | 68      | 2021-1-11    |
    | 15      | 32      | 2021-1-17    |
    | 12      | 11      | 2021-1-19    |
    | 14      | 18      | 2021-1-27    |
    +---------+---------+--------------+
    表 AcceptedRides:
    +---------+-----------+---------------+---------------+
    | ride_id | driver_id | ride_distance | ride_duration |
    +---------+-----------+---------------+---------------+
    | 10      | 10        | 63            | 38            |
    | 13      | 10        | 73            | 96            |
    | 7       | 8         | 100           | 28            |
    | 17      | 7         | 119           | 68            |
    | 20      | 1         | 121           | 92            |
    | 5       | 7         | 42            | 101           |
    | 2       | 4         | 6             | 38            |
    | 11      | 8         | 37            | 43            |
    | 15      | 8         | 108           | 82            |
    | 12      | 8         | 38            | 34            |
    | 14      | 1         | 90            | 74            |
    +---------+-----------+---------------+---------------+
    输出:
    +-------+----------------+----------------+
    | month | active_drivers | accepted_rides |
    +-------+----------------+----------------+
    | 1     | 2              | 0              |
    | 2     | 3              | 0              |
    | 3     | 4              | 1              |
    | 4     | 4              | 0              |
    | 5     | 5              | 0              |
    | 6     | 5              | 1              |
    | 7     | 5              | 1              |
    | 8     | 5              | 1              |
    | 9     | 5              | 0              |
    | 10    | 6              | 0              |
    | 11    | 6              | 2              |
    | 12    | 6              | 1              |
    +-------+----------------+----------------+
    解释:
    截至1月底->两个活跃的驾驶员(10,8),没有被接受的行程。
    截至2月底->三个活跃的驾驶员(10,8,5),没有被接受的行程。
    截至3月底->四个活跃的驾驶员(10,8,5,7),一个被接受的行程(10)。
    截至4月底->四个活跃的驾驶员(10,8,5,7),没有被接受的行程。
    截至5月底->五个活跃的驾驶员(10,8,5,7,4),没有被接受的行程。
    截至6月底->五个活跃的驾驶员(10,8,5,7,4),一个被接受的行程(13)。
    截至7月底->五个活跃的驾驶员(10,8,5,7,4),一个被接受的行程(7)。
    截至8月底->五个活跃的驾驶员(10,8,5,7,4),一位接受的行程(17)。
    截至9月底->五个活跃的驾驶员(10,8,5,7,4),没有被接受的行程。
    截至10月底->六个活跃的驾驶员(10,8,5,7,4,1),没有被接受的行程。
    截至11月底->六个活跃的驾驶员(10,8,5,7,4,1),两个被接受的行程(20,5)。
    截至12月底->六个活跃的驾驶员(10,8,5,7,4,1),一个被接受的行程(2)。
    1. with recursive t3 as (select '2020-01-01' n
    2. union all select date_add(n,interval 1 month) # 得到 (2020年的 112月 但是 会多一个 20211yue 不要紧后面会滤掉)
    3. from t3 where year(n) =2020),
    4. t2 as (
    5. select
    6. month(df) `month` , max(co) mc
    7. from
    8. (
    9. select # 2020 每月 Hopper公司工作的驾驶员数量
    10. join_date df,count(driver_id) over(order by join_date rows between unbounded preceding and current row) co
    11. from (select
    12. driver_id,join_date
    13. from
    14. Drivers
    15. union all
    16. select
    17. null driver_id, n join_date
    18. from
    19. t3
    20. where date_format(n,'%Y-%m') not in (select
    21. date_format(join_date,'%Y-%m')
    22. from
    23. Drivers
    24. )
    25. )ss2
    26. )s2
    27. where year(df) = 2020
    28. group by month(df)
    29. ), t1 as (# 每个月接受的乘车次数(
    30. select
    31. count(driver_id) cdi,month(requested_at) `month`
    32. from
    33. (
    34. select
    35. a.driver_id,r.requested_at
    36. from
    37. AcceptedRides a left join Rides r
    38. using(ride_id)
    39. )s1
    40. where date_format(requested_at,'%Y') = '2020'
    41. group by date_format(requested_at,'%Y-%m')
    42. )
    43. select t2.month `month`,t2.mc active_drivers,ifnull(t1.cdi,0) accepted_rides from t2 left join t1 using(`month`) # t2 left join t1 得出题中需求
    44. order by `month`

  • 相关阅读:
    Android 下的usb框架及功能点
    java中的Random
    用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (4)- 自定义功能块(上)
    ACM输入输出格式处理tricks (python)
    pytorch学习第三篇:梯度
    [Unity]PostProcessing导入新场景报 NullReferenceException
    常用 CMD 命令
    antd tree 懒加载+局部刷新
    js回到顶部或定位到指定元素
    Apache反向代理&负载均衡
  • 原文地址:https://blog.csdn.net/m0_69157845/article/details/125534244