首页 > 其他分享 >计算即时订单比例-首单使用开窗函数row_number()

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

时间:2023-09-28 18:37:36浏览次数:36  
标签:info number delivery 订单 首单 date order row


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

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

配送信息表 delivery_info

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


期望结果

计算即时订单比例-首单使用开窗函数row_number()_hive_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()_保留两位小数_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


标签:info,number,delivery,订单,首单,date,order,row
From: https://blog.51cto.com/u_16084838/7641588

相关文章

  • F. Vasilije Loves Number Theory
    F.VasilijeLovesNumberTheory前提知识:d(n)表示数字n的正约数个数,gcd(a,b)表示a,b两者的最大公约数要点:问是否存在a,使得d(a*n)=n,gcd(n,a)=1,意思是n与a互质,则可得,d(a*n)=d(a)*d(n)=n则问题转化成n%d(n)==0?尽管d(n)<=1e9,但n可能很大,所以可以利用质因子来求点击查看......
  • browser_more
    title:关于浏览器的那些事儿tags:[浏览器,Web优化]categories:湿垃圾keywords:关于浏览器的那些事儿,浏览器内核,浏览器渲染,浏览器的性能优化,浏览器的兼容性优化description:从浏览器的基础知识到页面的渲过程与优化hot:truedate:2020-12-2122:16:15{%notewa......
  • nginx访问报错“maximum number of descriptors supported by select() is 1024 while
    1、问题背景 项目:一个人力的系统,主要用于考勤打卡环境:windowsservernginx版本:1.22 问题说明:当早上访问人数增加的时候,就会出现nginx的异常nginx的后台报错日志:maximumnumberofdescriptorssupportedbyselect()is1024whileconnectingtoupstream  ......
  • 【踩坑】JS/TS 整数明明没有超过 Number.MAX_VALUE,为啥精度还是丢失了?
    代码functioncalcKey(props){returnprops.reduce((key,prop,index)=>{constcode=prop[0]*(15+1)+prop[1];console.log(code);console.log(key);returnkey+code*Math.pow(1000,index);},0);}func......
  • [AGC024E] Sequence Growing Hard
    SequenceGrowingHard不难发现设合法的条件为第k位后,需满足\(k\in[1,n)\)\(A_{i,k+1}\leqA_{i+1,k}\)或k=n。对于连续相等的一段,在任意位置放得到的A_{i+1}相同需去重。以上两种方式体现为,在末尾放x,放一段不降序列,再在末尾放x,再放一段不降序列。以此类推。所......
  • mysql 查询时额外查询一个index列,类似sqlserver的ROW_NUMBER()
    --创建临时表CREATETEMPORARYTABLEtemp1AS(SELECT(@rowindex:=@rowindex+1)ASrowindex,a.city_id,b.nameas'city_name',a.dept_name,a.final_pointFROMaqjd_assessment_deptaJOINsys_citybona.city_id=b.idJOIN(SELECT(@rowindex:=......
  • [LeetCode] 1353. Maximum Number of Events That Can Be Attended 最多可以参加的会
    Youaregivenanarrayof events where events[i]=[startDayi,endDayi].Everyevent i startsat startDayi andendsat endDayi.Youcanattendanevent i atanyday d where startTimei<=d<=endTimei.Youcanonlyattendoneeventatanytime ......
  • 告警日志出现"which is different from the number of indexes 4 defined in the MySQ
    问题描述:告警日志出现"whichisdifferentfromthenumberofindexes4definedintheMySQL"报错,如下所示:数据库:MySQL5.7.211、告警日志########################################ErrorDetail########################################23092121:30:00[ERROR]Tablet......
  • error C2065: “CV_DATA_AS_ROW”: 未声明的标识符
    ce_dect\main_face.cpp(117):errorC2065:“CV_DATA_AS_ROW”:未声明的标识符将“CV_PCA_DATA_AS_ROW”改为PCA::DATA_AS_ROW即可。PCA::PCA(InputArraydata,InputArraymean,intflags,intmaxComponents=0)该构造函数的参数1为要进行PCA变换的输入Mat;参数2为该Mat......
  • 》》》oracle中用row_number查询最早一条数据
    转载:SQL中row_number() over(partition by)的用法说明_Mysql_脚本之家(jb51.net)select*from{selectcj.xh,--学生学号cj.cj,--学生成绩cj.ks_sj,--考试时间row_number()over(partitionbycj.xhorderbycj.ks_sjdesc)numfromks_cjcj--考......