计算即时订单比例-首单使用开窗函数row_number()

计算用户首单中即时订单占比,使用SQL开窗函数和decimal类型确保精度。

1 需求
即时订单和计划订单
订单配送中,如果期望配送日期和下单日期相同,称为即时订单,如果期望配送日期和下单日期不同,称为计划订单。

请从配送信息表(delivery_info)中求出每个用户的首单(用户的第一个订单)中即时订单的比例,保留两位小数,以小数形式显示。

配送信息表 delivery_info
在这里插入图片描述
期望结果
在这里插入图片描述
2 实现
思路
请从配送信息表(delivery_info)中求出每个用户的首单(用户的第一个订单)中即时订单的比例,保留两位小数,以小数形式显示。

首先需要从数据集中拿出每个用户的首单,一般都是使用排序开窗函数进行操作。然后计算即时订单的比例,只需要从拿出的首单数据中分别计算两个指标,再相除即可,注意需求中需要保留两位小数,所以可以使用 decimal 类型来展示最终的结果。

实现
1 使用开窗函数获取每一个用户的首单数据

select * from (
	select user_id,order_date,custom_date,
		row_number() over(partition by user_id order by order_date) rn
	from delivery_info
) t1 where rn=1

在这里插入图片描述
2 直接在结果 1 的基础上进行指标的统计和结果的输出即可,需要将结果转换为 decimal(10,2) 展示

select 
	cast(round(sum(if(order_date = custom_date, 1, 0)) / count(1), 2) 
         as decimal(10,2)) percentage
from (
	select user_id,order_date,custom_date,
		row_number() over(partition by user_id order by order_date) rn
	from delivery_info
) t1 where rn=1

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NeilNiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值