SQL面试题练习 —— 连续支付订单合并

目录

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

1 题目


现有一张用户支付表:t_user_pay 包含字段订单ID用户ID商户ID支付时间支付金额

如果同一用户在同一商户存在多笔订单,且中间该用户没有其他商户的支付记录,则认为是连续订单,请把连续订单进行合并,时间取最早支付时间,金额求和。

样例数据如下:


+----------+---------+-------------+---------------------+--------------+
| order_id | user_id | merchant_id |      pay_time        |  pay_amount  |
+----------+---------+-------------+---------------------+--------------+
| 001      | user_01 | merchant_01 | 2023-03-01 12:30:00 | 50.0         |
| 002      | user_01 | merchant_01 | 2023-03-01 13:45:00 | 75.5         |
| 003      | user_01 | merchant_02 | 2023-03-01 14:00:00 | 100.0        |
| 004      | user_01 | merchant_03 | 2023-03-02 09:15:00 | 25.0         |
| 005      | user_01 | merchant_03 | 2023-03-02 10:30:00 | 150.25       |
| 006      | user_01 | merchant_01 | 2023-03-02 11:00:00 | 500.0        |
| 007      | user_01 | merchant_02 | 2023-03-03 08:00:00 | 80.0         |
| 008      | user_02 | merchant_01 | 2023-03-03 09:30:00 | 120.0        |
| 009      | user_02 | merchant_02 | 2023-03-04 13:45:00 | 65.0         |
| 010      | user_02 | merchant_03 | 2023-03-04 14:00:00 | 150.0        |
| 011      | user_02 | merchant_03 | 2023-03-05 11:30:00 | 20.0         |
| 012      | user_02 | merchant_03 | 2023-03-05 12:00:00 | 105.0        |
| 013      | user_03 | merchant_02 | 2023-03-05 13:15:00 | 250.0        |
| 014      | user_03 | merchant_01 | 2023-03-06 09:45:00 | 30.0         |
| 015      | user_03 | merchant_02 | 2023-03-06 10:00:00 | 90.5         |
+----------+---------+-------------+---------------------+--------------+

2 建表语句


CREATE TABLE t_user_pay (
  order_id VARCHAR(255),       -- 订单ID
  user_id VARCHAR(255),        -- 用户ID
  merchant_id VARCHAR(255),    -- 商户ID
  pay_time TIMESTAMP,          -- 支付时间
  pay_amount DOUBLE            -- 支付金额
);

INSERT INTO t_user_pay VALUES
  ('001', 'user_01', 'merchant_01', '2023-03-01 12:30:00', 50.0),
  ('002', 'user_01', 'merchant_01', '2023-03-01 13:45:00', 75.5),
  ('003', 'user_01', 'merchant_02', '2023-03-01 14:00:00', 100.0),
  ('004', 'user_01', 'merchant_03', '2023-03-02 09:15:00', 25.0),
  ('005', 'user_01', 'merchant_03', '2023-03-02 10:30:00', 150.25),
  ('006', 'user_01', 'merchant_01', '2023-03-02 11:00:00', 500.0),
  ('007', 'user_01', 'merchant_02', '2023-03-03 08:00:00', 80.0),
  ('008', 'user_02', 'merchant_01', '2023-03-03 09:30:00', 120.0),
  ('009', 'user_02', 'merchant_02', '2023-03-04 13:45:00', 65.0),
  ('010', 'user_02', 'merchant_03', '2023-03-04 14:00:00', 150.0),
  ('011', 'user_02', 'merchant_03', '2023-03-05 11:30:00', 20.0),
  ('012', 'user_02', 'merchant_03', '2023-03-05 12:00:00', 105.0),
  ('013', 'user_03', 'merchant_02', '2023-03-05 13:15:00', 250.0),
  ('014', 'user_03', 'merchant_01', '2023-03-06 09:45:00', 30.0),
  ('015', 'user_03', 'merchant_02', '2023-03-06 10:00:00', 90.5);

样例结果

在这里插入图片描述

3 题解


select
    user_id,
    merchant_id,
    min(pay_time) new_pay_time,
    sum(pay_amount) new_pay_amount
from
(select
		*,
	# 分别按照用户分组按照支付时间进行排序得到 u_rn,
	# 用户和商户分组按照支付时间排序u_m_rn
    row_number()over(partition by user_id order by pay_time) as u_rn,
    row_number()over(partition by user_id,merchant_id order by pay_time) as u_m_rn
from t_user_pay)t
group by user_id,merchant_id,u_rn-u_m_rn;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/662460.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言 指针——指针变量做函数参数

目录 指针变量的解引用 为什么要用指针变量做函数参数? 演示Call by value 指针变量的解引用 为什么要用指针变量做函数参数? 演示Call by value

Tomcat启动过程

ClassLoader初始化 发生在org.apache.catalina.startup.Bootstrap#init() Catalina初始化 1、加载Digester工具 发生在org.apache.catalina.startup.Catalina#load() 2、容器启动,启用StandardContext维持Socket连接 Digester工具初始化 发生在org.apache.catali…

1比1万地形图符号库分享

我们在《1:2.5万、1:5万、1:10万军用地形图图式》一文中,为大家分享过军用地形图式。 还在《超实用三调符号库分享下载》一文中,为大家分享过三调符号库。 现在再为你分享一个1比1万的地形图符号库,请在文末查看符号…

浏览器修改后端返回值

模拟接口响应和网页内容 通过本地覆盖可以模拟接口返回值和响应头,无需 mock 数据工具,比如(Requestly),无需等待后端支持,快速复现在一些数据下的 BUG 等。在 DevTools 可以直接修改你想要的 Fetch/XHR 接…

nvidia orin nx 刷机JETPACK 6

条件: 1.sdkmanager 链接:https://pan.baidu.com/s/1pmeT7_vKF_NXvP8xEhCelw?pwd8q1e 提取码:8q1e 2.ubuntu 20或者ubuntu22 3.nvidia orin nx Nvidia Jetson Orin NX(一)开始刷机_jetson nx刷机-CSDN博客 …

四象限桌面怎么制作 结合桌面便签更高效

在繁忙的工作中,我们经常面临各种任务和项目的挑战,如何高效地管理这些任务成为提升工作效率的关键。这时候,四象限时间管理法就显得尤为重要。 四象限,即将工作按照紧急与重要程度分为四类:紧急且重要、紧急不重要、…

spring分析工具_springboot startup analyze的部署和使用

工具是开源工具 ,可以放心使用 我是从开源中国OCSChina看到的顺便安利一下 部署 教程 https://github.com/linyimin0812/spring-startup-analyzer 直接下载地址 https://github.com/linyimin0812/spring-startup-analyzer/releases/download/v3.0.0/spring-startup-analyzer.…

快团团供货大团长如何打印电子面单?

一、功能说明 快团团打单平台是目前唯一一个服务于快团团团长的打单发货工具,免费提供给团长使用。可帮助团长快速打印面单、分拣包裹、完成发货。 目前快团团打单平台已支持大批量打印快递单、自定义快递面单、自动发货、绑定拼多多电子面单账号等功能&#xff0c…

计算机毕业设计Python+Spark+PyTroch游戏推荐系统 游戏可视化 游戏爬虫 神经网络混合CF推荐算法 协同过滤推荐算法 steam 大数据

毕业设计(论文) 基于SpringBoot的游戏防沉迷系统的设计与实现 摘 要 随着网络游戏市场的持续火爆,其最明显的负面影响----“网络游戏沉迷问题”已成为当前社会普遍关心的热点问题。根据2010年8月1日实施的《网络游戏管理暂行办法》,网络游…

基于随机森林Proximity的数据插补(imputation):原理,实现与实验

Random Forest Proximity based missing values imputation: algorithm,implementation and experiments 随机森林和数据插补简介基于随机森林Proximity的缺失数据插补原理算法流程实现 实验插补的评价指标原始Proximity与RF-GAP对比mnist可视化结果 附录 项目主页:…

【云原生】用 Helm 来简化 K8s 应用管理

用 Helm 来简化 K8s 应用管理 1.诞生背景2.主要功能3.相关概念4.工作原理5.架构演变6.Helm 常用命令7.推荐仓库8.Charts8.1 目录结构8.2 构建一个无状态应用模版 charts Helm 对于 Kubernetes 来说就相当于 Yum 对于 Centos 来说,如果没有 Yum 的话,我们…

LiveGBS流媒体平台GB/T28181用户手册-国标级联:添加上级平台、选择通道、推送通道级联会话、搜索、删除

LiveGBS流媒体平台GB/T28181用户手册-国标级联:添加上级平台、选择通道、推送通道级联会话、搜索、删除 1、国标级联1.1、添加上级平台1.2、注册状态1.3、选择通道1.4、推送通道1.5、级联会话1.6、搜索1.7、删除 2、搭建GB28181视频直播平台 1、国标级联 1.1、添加上级平台 点…

四川音盛佳云电子商务有限公司可靠吗?怎么样?

在数字经济的浪潮中,抖音电商以其独特的魅力逐渐崭露头角,成为电商领域的一股新势力。而四川音盛佳云电子商务有限公司,正是这股新势力中的佼佼者,以其专业的服务和创新的理念,引领着抖音电商的发展潮流。 四川音盛佳…

python Z-score标准化

python Z-score标准化 Zscore标准化sklearn库实现Z-score标准化手动实现Z-score标准化 Zscore标准化 Z-score标准化(也称为标准差标准化)是一种常见的数据标准化方法,它将数据集中的每个特征的值转换为一个新的尺度,使得转化后的…

Java-数组内存解析

文章目录 1.内存的主要结构:栈、堆2.一维数组的内存解析3.二维数组的内存解析 1.内存的主要结构:栈、堆 2.一维数组的内存解析 举例1:基本使用 举例2:两个变量指向一个数组 3.二维数组的内存解析 举例1: 举例2&am…

[Linux系统编程] 静态库与动态库

一.库的概念 库是写好的现有的,成熟的,可以复用的代码。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。…

nvidia origin nx 刷机JETPACK 6

条件: 1.sdkmanager 链接:https://pan.baidu.com/s/1pmeT7_vKF_NXvP8xEhCelw?pwd8q1e 提取码:8q1e 2.ubuntu 20或者ubuntu22 3.nvidia orin nx Nvidia Jetson Orin NX(一)开始刷机_jetson nx刷机-CSDN博客 …

CatDDoS僵尸网络与DNSBomb攻击:DDOS攻击最新变种

在近期的网络安全领域,两大严峻挑战浮出水面,为中国乃至全球的网络防护体系敲响了警钟。中国安全厂商奇安信的X实验室团队揭露了一波名为CatDDoS的恶意软件攻击浪潮,与此同时,一种创新且隐蔽的拒绝服务攻击技术——DNSBomb&#x…

操作系统真象还原:完善MBR

第3章-完善MBR 这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件 编译器给程序中各符号(变量名或函数名等)分配的地址,就是各符号相对于文件开头的偏移量 。 section 称为节,在有的编译器中,同…

【注册表删除】Navicat Premium 16的试用期已过期的解决方案

文章目录 【问题】【解决方式】 【问题】 使用Navicat Premium 16提示试用期已过期,如下图所示情况: 【解决方式】 1、关闭Navicat Premium 16 确保Navicat Premium 16处于关闭状态。 2、Win R,输入 regedit 回车 3、删除Data文件夹 在注…