暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

单挑力扣(LeetCode)SQL笔试题:1173. 即时食物配送 I(难度:简单)

跟强哥学SQL 2023-03-03
269
题目:1173. 即时食物配送 I
(通过次数17,717 | 提交次数23,141,通过率76.56%)
    配送表: Delivery
    +-----------------------------+---------+
    | Column Name | Type |
    +-----------------------------+---------+
    | delivery_id | int |
    | customer_id | int |
    | order_date | date |
    | customer_pref_delivery_date | date |
    +-----------------------------+---------+
    delivery_id 是表的主键。
    该表保存着顾客的食物配送信息,顾客在某个日期下了订单,并指定了一个期望的配送日期(和下单日期相同或者在那之后)。


    如果顾客期望的配送日期和下单日期相同,则该订单称为 「即时订单」,否则称为「计划订单」。


    写一条 SQL查询语句获取即时订单所占的百分比,保留两位小数。
    查询结果如下所示。
    示例 1:
    输入:
    Delivery 表:
    +-------------+-------------+------------+-----------------------------+
    | delivery_id | customer_id | order_date | customer_pref_delivery_date |
    +-------------+-------------+------------+-----------------------------+
    | 1 | 1 | 2019-08-01 | 2019-08-02 |
    | 2 | 5 | 2019-08-02 | 2019-08-02 |
    | 3 | 1 | 2019-08-11 | 2019-08-11 |
    | 4 | 3 | 2019-08-24 | 2019-08-26 |
    | 5 | 4 | 2019-08-21 | 2019-08-22 |
    | 6 | 2 | 2019-08-11 | 2019-08-13 |
    +-------------+-------------+------------+-----------------------------+
    输出:
    +----------------------+
    | immediate_percentage |
    +----------------------+
    | 33.33 |
    +----------------------+
    解释:23 号订单为即时订单,其他的为计划订单。


    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/immediate-food-delivery-i

      #测试数据
      Create table If Not Exists Delivery (delivery_id int, customer_id int, order_date date, customer_pref_delivery_date date);


      insert into Delivery (delivery_id, customer_id, order_date, customer_pref_delivery_date) values ('1', '1', '2019-08-01', '2019-08-02');
      insert into Delivery (delivery_id, customer_id, order_date, customer_pref_delivery_date) values ('2', '5', '2019-08-02', '2019-08-02');
      insert into Delivery (delivery_id, customer_id, order_date, customer_pref_delivery_date) values ('3', '1', '2019-08-11', '2019-08-11');
      insert into Delivery (delivery_id, customer_id, order_date, customer_pref_delivery_date) values ('4', '3', '2019-08-24', '2019-08-26');
      insert into Delivery (delivery_id, customer_id, order_date, customer_pref_delivery_date) values ('5', '4', '2019-08-21', '2019-08-22');
      insert into Delivery (delivery_id, customer_id, order_date, customer_pref_delivery_date) values ('6''2''2019-08-11''2019-08-13');
      解题思路:
      Delivery表保存了所有订单的配送信息。包括配送时间及下单时间。
      如果配送时间与下单时间相同,则表示该订单为即时订单。
      题目要求:查询即时订单的占比。
      即时订单的占比 = 即时订单数 总订单数。
      总订单数比较容易获取,直接对Delivery表计算COUNT即可。
      而即时订单数,需要从Delivery表中筛选出配送时间与下单时间相同的记录,再计算COUNT。
      最后,分子与分母相除即可。
      参考SQL:
        select
        case when count(1)>0 then round(count(case when order_date = customer_pref_delivery_date then 1 else null end)*100/count(1),2) else 0.00 end immediate_percentage
        from Delivery;

        单挑力扣(LeetCode)SQL笔试题:1141. 查询近30天活跃用户数(难度:简单)
        单挑力扣(LeetCode)SQL笔试题:1142. 过去30天的用户活动 II(难度:简单)
        单挑力扣(LeetCode)SQL笔试题:1148. 文章浏览 I(难度:简单)


        笔试题合集免费领取方法


        方法一:关注公众号【跟强哥学SQL】,回复关键字【力扣】获取链接。

        方法二:访问【SQL网】:https://sql.wang/sql-leetcode/sql-exercise



        文章转载自跟强哥学SQL,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论