首页 > 数据库 >力扣数据库1174. 即时食物配送 II

力扣数据库1174. 即时食物配送 II

时间:2024-10-12 19:47:08浏览次数:8  
标签:customer 力扣 1174 delivery 08 II 订单 2019 date

一、数据

配送表: 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 号订单是首次订单,并且是即时订单。
因此,一半顾客的首次订单是即时的。

二、分析

1、因为要计算即时订单在所有用户的首次订单中的比例,且首次订单是顾客最早创建的订单,所以要先算出每个用户的首次订单时间。

2、然后需要算出即时订单的数量,让即时订单的数量除以首次订单的数量,并乘以100且保留两位小数即可得出答案。

三、代码

SELECT ROUND(SUM(order_date = customer_pref_delivery_date) / COUNT(*) * 100, 2) AS immediate_percentage
/* count(*)代表一共有多少个首次订单数量;
   SUM(order_date = customer_pref_delivery_date):当SUM内部的表达式为真实时返回1,反之返回0,然后对这些 1 和 0 的结果进行求和。*/
FROM Delivery
WHERE (customer_id, order_date) IN
      (SELECT customer_id, MIN(order_date)
       FROM Delivery
       GROUP BY customer_id); -- 子查询查出每个用户的首次订单时间

四、总结

1、代码的主要难点为主查询中的SUM函数:

  • order_date = customer_pref_delivery_date 是一个条件表达式。在 SQL 中,这种比较操作会返回 1(代表真)如果 order_date 和 customer_pref_delivery_date 相等,否则返回 0
  • SUM() 函数会对这些 1 和 0 的结果进行求和。所以,这个求和的结果实际上就是满足 order_date 和 customer_pref_delivery_date 相等条件的行数总和

2、round函数可以实现保留几位小数。

标签:customer,力扣,1174,delivery,08,II,订单,2019,date
From: https://blog.csdn.net/dhdbanwan/article/details/142862335

相关文章

  • 454_四数相加Ii
    454_四数相加Ii【问题描述】给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i,j,k,l)能满足:0<=i,j,k,l<nnums1[i]+nums2[j]+nums3[k]+nums4[l]==0示例一:输入:nums1=[1,2],nums2=[-2,-1],nums3=[-1,2......
  • 454_四数相加Ii
    454_四数相加Ii【问题描述】给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i,j,k,l)能满足:0<=i,j,k,l<nnums1[i]+nums2[j]+nums3[k]+nums4[l]==0示例一:输入:nums1=[1,2],nums2=[-2,-1],nums3=[-1,2......
  • 【力扣150&Golang】分发糖果
    题目:分发糖果n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果:每个孩子至少分配到1个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的最少糖果数目。示例......
  • 【力扣150&Golang】加油站
    题目:加油站在一条环路上有n个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组gas和cost,如果你可以按顺序绕环路行......
  • Windows Server 2008R2服务器 IIS7.0 安装SSL证书并绑定https
    本例以阿里云服务器来解说,本服务器为WinodwsServer2008R2(一般现在至少是2012版本了)默认IIS为7.0第一步:在阿里云上申请好证书并下载IIS版本,下载后上传到服务器中,如下图:第二步:导入证书在服务器按Win+R键,打开运行。输入mmc,单击确定,打开Windows服务器控制台(MMC,MicrosoftMa......
  • iis网站数据库无法连接数据库
    IIS网站无法连接数据库的问题可能由多种原因导致,以下是一些常见的排查步骤和解决方法:检查数据库连接字符串:确认数据库服务器地址、端口、用户名和密码是否正确。检查是否有防火墙或安全组规则阻止了访问。确认数据库服务状态:确保数据库服务(如MySQL,SQLServer等)正在......
  • 毕设项目案例实战II基于Java+Spring Boot+MySQL的学生选课系统的设计与实现(源码+数据
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着信息技术的飞速发展和教育信息化的不......
  • 毕设项目案例实战II基于SSM的健身房预约系统设计与实现(源码+数据库+文档)
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着健康意识的日益增强,健身房已成为现代......
  • 代码随想录算法训练营 | 完全背包,518. 零钱兑换 II,377. 组合总和 Ⅳ,70. 爬楼梯 (进阶)
    完全背包题目链接:完全背包文档讲解︰代码随想录(programmercarl.com)视频讲解︰完全背包日期:2024-10-11想法:dp数组设置思路跟01背包一样,不同在遍历上,完全背包遍历背包大小是从weight[i]开始的(背包空间小于weight[i]就没有意义,不用考虑,直接用之前的对应数值就行了),从前往后遍历就能......
  • 3164. 优质数对的总数 II
    给你两个整数数组nums1和nums2,长度分别为n和m。同时给你一个正整数k。如果nums1[i]可以被nums2[j]*k整除,则称数对(i,j)为优质数对(0<=i<=n-1,0<=j<=m-1)。返回优质数对的总数。示例1:输入:nums1=[1,3,4],nums2=[1,3,4],k=1输出:5解释:5......