原题链接:http://practice.atguigu.cn/#/question/13/desc?qType=SQL
题目需求
订单配送中,如果期望配送日期和下单日期相同,称为即时订单,如果期望配送日期和下单日期不同,称为计划订单。
请从配送信息表(delivery_info)中求出每个用户的首单(用户的第一个订单)中即时订单的比例,保留两位小数,以小数形式显示。
期望结果如下:
percentage<decimal(16,2)> |
---|
0.50 |
需要用到的表:
配送信息表:delivery_info
delivery_id (运单 id ) | order_id (订单id) | user_id (用户 id ) | order_date (下单日期) | custom_date (期望配送日期) |
---|---|---|---|---|
1 | 1 | 101 | 2021-09-27 | 2021-09-29 |
2 | 2 | 101 | 2021-09-28 | 2021-09-28 |
3 | 3 | 101 | 2021-09-29 | 2021-09-30 |
解题思路
使用row_number()找出所有首单记录,随后对比下单日期和期望配送日期即可
SELECT cast(SUM(is_immediate)/COUNT(1) AS decimal(16,2)) AS percentage
FROM
(
SELECT order_id,
IF(order_date = custom_date,1,0) AS is_immediate,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY (order_date,order_id) ASC) AS rn
FROM delivery_info
) t1
WHERE rn = 1