计算即时订单比例-首单使用开窗函数row_number()
  WeuFZCnClySo 2023年11月02日 44 0


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

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

配送信息表 delivery_info

计算即时订单比例-首单使用开窗函数row_number()_保留两位小数


期望结果

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


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

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


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

计算即时订单比例-首单使用开窗函数row_number()_保留两位小数_04


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
WeuFZCnClySo