• 计算即时订单比例-首单使用开窗函数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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

  • 相关阅读:
    esbuild中文文档-路径解析配置项(Path resolution - External、Main fields)
    monaco-editor 实现SQL编辑器
    8.11 可解析AI
    HTML 入门
    C++之单字符串匹配问题
    2.10.2版本的青龙升级2.10.13及2.11.3版本的教程
    Kubernetes 系统化学习之 资源清单篇(三)
    如何理解相机标定?
    取个好名,是一生中极为重要之事
    目标检测入门
  • 原文地址:https://blog.csdn.net/qq_30353203/article/details/132843442