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

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
相关推荐
二进制_博客11 小时前
spark on hive 还是 hive on spark?
大数据·hive·spark
D明明就是我1 天前
Hive 知识点梳理
数据仓库·hive·hadoop
工作中的程序员4 天前
hive sql优化基础
hive·sql
风跟我说过她4 天前
Sqoop的安装与配置
hive·hadoop·经验分享·centos·hbase·sqoop
DashingGuy9 天前
hive、spark任务报错或者异常怎么排查以及定位哪段sql
hive·sql·spark
秦JaccLink12 天前
Hive语句执行顺序详解
数据仓库·hive·hadoop
AI算力网络与通信12 天前
大数据领域 Hive 数据仓库搭建实战
大数据·数据仓库·hive·ai
工业互联网专业15 天前
基于大数据hive的银行信用卡用户的数仓系统的设计与实现_django
大数据·hive·django·毕业设计·源码·课程设计·数仓系统
顧棟16 天前
【Hive实战】hive-testbench的调研
数据仓库·hive·hadoop
emmm...16 天前
hive连不上,报错9000拒绝连接
数据仓库·hive·hadoop