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

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.执行结果

相关文章:

  • MATLAB仿真生成无线通信网络拓扑推理数据集
  • [25-cv-05986]Keith律所代理Paisley Yazel版权画
  • 【连接器专题】案例:产品测试顺序表解读与应用
  • SAP学习笔记 - 开发20 - 前端Fiori开发 Nest View(嵌套视图) ,Fragment(片段)
  • 全球高尔夫球场运营服务市场:现状、挑战与未来发展
  • python学习(一)
  • 【java】springboot注解关键字
  • 【MATLAB去噪算法】基于CEEMD联合小波阈值去噪算法(第三期)
  • leetcode hot100 链表(二)
  • Spring Boot + MyBatis-Plus 读写分离与多 Slave 负载均衡示例
  • 适老化场景重构:现代家政老年照护虚拟仿真实训室建设方案​
  • 如何在 vue 中实现一个自定义拖拽的指令或插件
  • qt 事件顺序
  • Laravel模型状态:深入理解Eloquent的隐秘力量
  • QT常用控件(1)
  • metersphere不同域名的参数在链路测试中如何传递?
  • 项目任务,修改svip用户的存储空间。
  • 微博app 最新版本15.5.2 mfp 分析
  • RagFlow优化代码解析(一)
  • 操作系统:生态思政
  • 益阳网站建设/网络营销课程个人总结范文
  • 西安分销商城网站建设/网络营销个人感悟小结
  • 好男人的最好的影院/seo排名推广工具
  • 零基础网站建设/品牌推广的方式
  • 免费创办网站/百度百科官网登录
  • 域名服务网站建设科技公司/什么叫营销