题目
配送表: Delivery
如果顾客期望的配送日期和下单日期相同,则该订单称为 「即时订单」,否则称为「计划订单」。
「首次订单」是顾客最早创建的订单。我们保证一个顾客只会有一个「首次订单」。
写一条 SQL 查询语句获取即时订单在所有用户的首次订单中的比例。保留两位小数。
查询结果如下所示:
解题思路
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 Deliverygroup by customer_id
)
测试结果