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

Leetcode 1336. 每次访问的交易次数

1.题目基本信息

1.1.题目描述

表: Visits

±--------------±--------+

| Column Name | Type |

±--------------±--------+

| user_id | int |

| visit_date | date |

±--------------±--------+

(user_id, visit_date) 是该表的主键(具有唯一值的列的组合)

该表的每行表示 user_id 在 visit_date 访问了银行

表: Transactions

±-----------------±--------+

| Column Name | Type |

±-----------------±--------+

| user_id | int |

| transaction_date | date |

| amount | int |

±-----------------±--------+

该表可能有重复行

该表的每一行表示 user_id 在 transaction_date 完成了一笔 amount 数额的交易

可以保证用户 (user) 在 transaction_date 访问了银行 (也就是说 Visits 表包含 (user_id, transaction_date) 行)

银行想要得到银行客户在一次访问时的交易次数和相应的在一次访问时该交易次数的客户数量的图表

编写解决方案找出多少客户访问了银行但没有进行任何交易,多少客户访问了银行进行了一次交易等等

结果包含两列:

  • transactions_count: 客户在一次访问中的交易次数
  • visits_count: 在 transactions_count 交易次数下相应的一次访问时的客户数量

transactions_count 的值从 0 到所有用户一次访问中的 max(transactions_count)

结果按 transactions_count 排序

1.2.题目地址

https://leetcode.cn/problems/number-of-transactions-per-visit/description/

2.解题方法

2.1.解题思路

递归+聚合

2.2.解题步骤

第一步,将Visits的visit_date作为transaction_date,amount看做0,和Transaction表格做UNION ALL,得到表格T1

第二步,T1中,以user_id,transaction_date作为主键,对(amount>0)的求和,得到每个用户每次访问的交易次数,记为字段transactions_count,得到表格T2

第三步,T2中,统计所有transactions_count出现的次数,记为字段visits_count,得到表格T3

第四步,获取递归的构建transactions_count=0-MAX(transactions_count)的表格T4

第五步,T4和T3作左连接,visits_count为NULL则记为0

3.解题代码

sql代码

# Write your MySQL query statement below
WITH RECURSIVE 
T1 AS (# 第一步,将Visits的visit_date作为transaction_date,amount看做0,和Transaction表格做UNION ALL,得到表格T1SELECT * FROM TransactionsUNION ALLSELECT user_id, visit_date AS transaction_date, 0 AS amountFROM Visits
), T2 AS (# 第二步,T1中,以user_id,transaction_date作为主键,对(amount>0)的求和,得到每个用户每次访问的交易次数,记为字段transactions_count,得到表格T2SELECT SUM(amount > 0) AS transactions_countFROM T1GROUP BY user_id, transaction_date
), T3 AS (# 第三步,T2中,统计所有transactions_count出现的次数,记为字段visits_count,得到表格T3SELECT transactions_count, COUNT(transactions_count) AS visits_countFROM T2GROUP BY transactions_count
), T4 AS (# 第四步,获取递归的构建transactions_count=0-MAX(transactions_count)的表格T4SELECT 0 AS transactions_countUNION ALL SELECT transactions_count + 1 AS transactions_countFROM T4 WHERE transactions_count < (SELECT MAX(transactions_count) FROM T3)
)# 第五步,T4和T3作左连接,visits_count为NULL则记为0
SELECT T4.transactions_count, IFNULL(visits_count, 0) AS visits_count
FROM T3 RIGHT JOIN T4 ON T3.transactions_count = T4.transactions_count
ORDER BY transactions_count

4.执行结果

http://www.xdnf.cn/news/11045.html

相关文章:

  • 【C/C++】公共接口调用:aaa.so: undefined reference to `GetXXX‘
  • 实现购物车微信小程序
  • Seata的AT、TCC、Saga模式的区别及适用场景?
  • 如何轻松删除 Android 上的文件(3 种方法)
  • lanqiaoOJ 1508:N皇后问题 ← dfs
  • Linux进程间通信(IPC)
  • TypeScript 中的字面量类型(Literal Types)
  • 什么是 Docker Compose 的网络(network),为什么你需要它,它是怎么工作的
  • 词语翻译的三步法与背后的语言学思维
  • R²AIN SUITE AI知识库助力中国制造业数字化转型
  • ABAP设计模式之---“高内聚,低耦合(High Cohesion Low Coupling)”
  • 嵌入式学习 D31:系统编程--Framebuf帧缓冲
  • java实用类
  • 【Agent智能体】吴恩达:AI智能体发展现状 | LangChain访谈--快速总结
  • 电脑远程桌面连接如何设置端口?默认修改和内网给外网访问方法
  • ArkUI-X中Plugin生命周期开发指南
  • 不连网也能跑大模型?
  • 手机上网可以固定ip地址吗?详细解析
  • Ubuntu22.04 安装 Miniconda3
  • python直方图
  • 【前端并发请求控制:必要性与实现策略】
  • 为何选择Spring框架学习设计模式与编码技巧?
  • 从“remote rejected”看git角色区别,Maintainer和Devoloper
  • 使用 Docker Compose 安装 Redis 7.2.4
  • Python基于PCA、PCA-kernel、LDA的同心圆数据降维项目实战
  • 2005-2022全国及各省家庭承包耕地流转总面积及经营耕地面积数据(无缺失)
  • 移动网页调试的多元路径:WebDebugX 与其他调试工具的组合使用策略
  • HarmonyOS Next 弹窗系列教程(2)
  • matlab实现掺杂光纤放大器的模拟
  • uniapp开发使用vue3组合式api,实现从vue模块中自动导入