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

SQL面试题练习 —— 计算用户首单是即时单的比例

目录

  • 1 题目
  • 2 建表语句
  • 3 题解

题目来源:美团。

1 题目


在外卖订单中,有时用户会指定订单的配送时间。现定义:如果用户下单日期与期望配送日期相同则认为是即时单,如果用户下单日期与期望配送时间不同则是预约单。每个用户下单时间最早的一单为用户首单,请计算用户首单中即时单的占比。

t_user_order

在这里插入图片描述

2 建表语句


--建表语句
CREATE TABLE t_user_order
(
order_id string COMMENT '订单ID',
user_id string COMMENT '用户ID',
order_time string comment '下单时间',
desire_date string comment '期望送达日期'
) COMMENT '用户订单记录表'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
;
--插入数据
insert into t_user_order
values
('1001','001','2024-07-01 12:01:23','2024-07-01'),
('1002','001','2024-07-01 12:03:23','2024-07-02'),
('1003','002','2024-07-01 13:03:23','2024-07-02'),
('1004','002','2024-07-01 13:07:23','2024-07-01'),
('1005','003','2024-07-01 15:03:23','2024-07-01')

3 题解


  1. 找到用户首单,并判断是否是即时单
select order_id,user_id,order_time,desire_date,is_instant
from (select order_id,user_id,order_time,desire_date,if(to_date(order_time) = to_date(desire_date), 1, 0)              as is_instant,row_number() over (partition by user_id order by order_time asc ) as rnfrom t_user_order) t
where rn = 1

执行结果

在这里插入图片描述

  1. 统计用户首单总单数和即时单数
select count(case when is_instant = 1 then order_id end) as instant_cnt,-- count(if(is_instant = 1, order_id, null)) as instant_cnt,count(order_id) as total_cnt
from (select order_id,user_id,order_time,desire_date,if(to_date(order_time) = to_date(desire_date), 1, 0)              as is_instant,row_number() over (partition by user_id order by order_time asc ) as rnfrom t_user_order) t
where rn = 1

执行结果

在这里插入图片描述

  1. 计算即时单比例
selectround(count(case when is_instant = 1 then order_id end)/count(order_id),2) as instant_per
from (select order_id,user_id,order_time,desire_date,if(to_date(order_time) = to_date(desire_date), 1, 0)              as is_instant,row_number() over (partition by user_id order by order_time asc ) as rnfrom t_user_order) t
where rn = 1

执行结果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用Spring与JDK动态代理实现事务管理
  • 【最新】推荐6款论文ai写论文软件推荐网站平台
  • 【HarmonyOS NEXT星河版开发学习】小型测试案例11-购物车数字框
  • Ubantu设置国内镜像(阿里云、华为云)
  • 基于Jeecgboot3.6.3的vue3版本的流程中仿钉钉流程的鼠标拖动功能支持
  • 多模态大模型intern-vl 1.5 论文解读:How Far Are We to GPT-4V?
  • 代码随想录第二十四天|动态规划(8)
  • C#:基本语法
  • 操作ArkTS页面跳转及路由相关心得
  • 矩阵:消除冗余
  • 逻辑数仓:助企业高效、低成本、轻量级整合全域数据
  • 【MySQL】执行DDL选择Online DDL还是PT-OSC?
  • [BSidesCF 2019]Kookie1
  • 算法笔记|Day20回溯算法II
  • Jenkins部署java项目
  • [iOS]Core Data浅析一 -- 启用Core Data
  • [笔记] php常见简单功能及函数
  • 77. Combinations
  • crontab执行失败的多种原因
  • Js基础知识(四) - js运行原理与机制
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • SpringBoot 实战 (三) | 配置文件详解
  • tensorflow学习笔记3——MNIST应用篇
  • Terraform入门 - 1. 安装Terraform
  • 爱情 北京女病人
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 区块链共识机制优缺点对比都是什么
  • 深入浏览器事件循环的本质
  • 用mpvue开发微信小程序
  • k8s使用glusterfs实现动态持久化存储
  • Spring第一个helloWorld
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​ubuntu下安装kvm虚拟机
  • ​补​充​经​纬​恒​润​一​面​
  • (12)目标检测_SSD基于pytorch搭建代码
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (八十八)VFL语言初步 - 实现布局
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (剑指Offer)面试题34:丑数
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (太强大了) - Linux 性能监控、测试、优化工具
  • .net wcf memory gates checking failed
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET运行机制
  • 。Net下Windows服务程序开发疑惑
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @html.ActionLink的几种参数格式
  • @Transactional事务注解内含乾坤?
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)