题目描述
(通过次数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 | +----------------------+ 解释:2 和 3 号订单为即时订单,其他的为计划订单。 来源:力扣(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
未特别说明的情况下,参考SQL为基于MySQL8.0实现。
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;
本站所有内容均为原创,本站保留所有权利。仅允许非商业用途的转载,但必须注明来源网站、作者、来源链接!否则,由此造成的一切后果,由转载方承担!
干货分享、技术提升、面试笔试、学习交流,欢迎关注公众号:xuesql。QQ学习交流群:209942678。