当前位置: 首页 > article >正文

SQL-leetcode—1174. 即时食物配送 II

1174. 即时食物配送 II

配送表: Delivery

±----------------------------±--------+
| Column Name | Type |
±----------------------------±--------+
| delivery_id | int |
| customer_id | int |
| order_date | date |
| customer_pref_delivery_date | date |
±----------------------------±--------+
delivery_id 是该表中具有唯一值的列。
该表保存着顾客的食物配送信息,顾客在某个日期下了订单,并指定了一个期望的配送日期(和下单日期相同或者在那之后)。

如果顾客期望的配送日期和下单日期相同,则该订单称为 「即时订单」,否则称为「计划订单」。

「首次订单」是顾客最早创建的订单。我们保证一个顾客只会有一个「首次订单」。

编写解决方案以获取即时订单在所有用户的首次订单中的比例。保留两位小数。

结果示例如下所示:

示例 1:

输入:
Delivery 表:
±------------±------------±-----------±----------------------------+
| delivery_id | customer_id | order_date | customer_pref_delivery_date |
±------------±------------±-----------±----------------------------+
| 1 | 1 | 2019-08-01 | 2019-08-02 |
| 2 | 2 | 2019-08-02 | 2019-08-02 |
| 3 | 1 | 2019-08-11 | 2019-08-12 |
| 4 | 3 | 2019-08-24 | 2019-08-24 |
| 5 | 3 | 2019-08-21 | 2019-08-22 |
| 6 | 2 | 2019-08-11 | 2019-08-13 |
| 7 | 4 | 2019-08-09 | 2019-08-09 |
±------------±------------±-----------±----------------------------+
输出:
±---------------------+
| immediate_percentage |
±---------------------+
| 50.00 |
±---------------------+
解释:
1 号顾客的 1 号订单是首次订单,并且是计划订单。
2 号顾客的 2 号订单是首次订单,并且是即时订单。
3 号顾客的 5 号订单是首次订单,并且是计划订单。
4 号顾客的 7 号订单是首次订单,并且是即时订单。
因此,一半顾客的首次订单是即时的。

题解

获取即时订单在所有用户的首次订单中的比例。保留两位小数。

  • 即时订单、首次订单,要怎么获取?
  • 获取所有的首次订单 是总数 ,分子则是 即时订单的个数即可

方法一 sum/count

  • 为了检测通过,*100,理论上应该不乘的
with tmp as (
    select delivery_id,customer_id,order_date,customer_pref_delivery_date
    ,row_number() over(partition by customer_id order by order_date) as rn
    from Delivery 
)

select 
    round(sum(if(order_date=customer_pref_delivery_date,1,0)) * 100 / count(1) ,2) as immediate_percentage
from tmp where rn=1

方法二 avg函数

with tmp as (
    select delivery_id,customer_id,order_date,customer_pref_delivery_date
    ,row_number() over(partition by customer_id order by order_date) as rn
    from Delivery 
)

select 
-- avg函数,你细品
    ROUND(AVG(order_date = customer_pref_delivery_date) * 100, 2) AS immediate_percentage
from tmp where rn=1

http://www.kler.cn/a/515786.html

相关文章:

  • iOS开发设计模式篇第二篇MVVM设计模式
  • 基于微信小程序的童装商城的设计与实现(LW+源码+讲解)
  • 【RabbitMQ 消息丢失常见情况分析】
  • k8s namespace绑定节点
  • 【深度学习入门】深度学习知识点总结
  • 前端Vue2项目使用md编辑器
  • 【设计模式-行为型】观察者模式
  • Git报错:refusing to merge unrelated histories
  • 基于ESP32-IDF驱动GPIO输出控制LED
  • ChatGPT大模型极简应用开发-CH2-深入了解 GPT-4 和 ChatGPT 的 API
  • linux CentOS 创建账号,并设置权限
  • PL/SQL语言的图形用户界面
  • Haskell语言的正则表达式
  • 利用预训练检查点进行序列生成任务
  • 如何实现网页不用刷新也能更新
  • 微前端qiankun的部署
  • Java中Set集合的面试试题及答案解析
  • idea plugin插件开发——入门级教程(IntelliJ IDEA Plugin)
  • Ansible fetch模块详解:轻松从远程主机抓取文件
  • git如何设置pull的时候有些文件不pull
  • GitCode 助力 AutoTable:共创 MyBatis 生态的自动表格管理新篇章
  • 常见的RocketMQ面试题及其简要答案
  • Ubuntu系统更改IP,保姆级教程
  • 【Redis】在Java中以及Spring环境下操作Redis
  • 快速搭建深度学习环境(Linux:miniconda+pytorch+jupyter notebook)
  • java开发之文件上传