SQL-每日一题【1174. 即时食物配送 II】

题目

配送表: Delivery

SQL-每日一题【1174. 即时食物配送 II】_第1张图片

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

「首次订单」是顾客最早创建的订单。我们保证一个顾客只会有一个「首次订单」。

写一条 SQL 查询语句获取即时订单在所有用户的首次订单中的比例。保留两位小数。

查询结果如下所示:

SQL-每日一题【1174. 即时食物配送 II】_第2张图片

SQL-每日一题【1174. 即时食物配送 II】_第3张图片  

解题思路

1.题目要求我们获取即时订单在所有用户的首次订单中的比例并且保留两位小数。那我们首先就要查询出所有顾客的首次订单,我们使用一个子查询,先将表中的记录按customer_id

分组,然后用min()函数找出每一组中 order_date 最小的订单,也就是我们的首次订单

2.我们再从已经查询到的首次订单中找到即时订单,也就是order_date = customer_pref_delivery_date 的订单,然后让它除以全部的首次订单,并且乘以100(因为求的是百分比),最后用round()函数保留两位小数即可。

代码实现

select round(sum(order_date=customer_pref_delivery_date)/count(*)*100,2) as immediate_percentage
from Delivery
where (customer_id, order_date ) in (
    select customer_id,min(order_date)
    from Delivery
    group by customer_id
)

测试结果

SQL-每日一题【1174. 即时食物配送 II】_第4张图片

 

你可能感兴趣的:(sql,数据库)