leetcode 1336 每次访问的交易次数(postgresql)

news2024/11/15 23:41:11

需求

表: 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) 行)

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

写一条 SQL 查询多少客户访问了银行但没有进行任何交易,多少客户访问了银行进行了一次交易等等

结果包含两列:

transactions_count: 客户在一次访问中的交易次数
visits_count: 在 transactions_count 交易次数下相应的一次访问时的客户数量
transactions_count 的值从 0 到所有用户一次访问中的 max(transactions_count)

按 transactions_count 排序

下面是查询结果格式的例子:

Visits 表:
±--------±-----------+
| user_id | visit_date |
±--------±-----------+
| 1 | 2020-01-01 |
| 2 | 2020-01-02 |
| 12 | 2020-01-01 |
| 19 | 2020-01-03 |
| 1 | 2020-01-02 |
| 2 | 2020-01-03 |
| 1 | 2020-01-04 |
| 7 | 2020-01-11 |
| 9 | 2020-01-25 |
| 8 | 2020-01-28 |
±--------±-----------+
Transactions 表:
±--------±-----------------±-------+
| user_id | transaction_date | amount |
±--------±-----------------±-------+
| 1 | 2020-01-02 | 120 |
| 2 | 2020-01-03 | 22 |
| 7 | 2020-01-11 | 232 |
| 1 | 2020-01-04 | 7 |
| 9 | 2020-01-25 | 33 |
| 9 | 2020-01-25 | 66 |
| 8 | 2020-01-28 | 1 |
| 9 | 2020-01-25 | 99 |
±--------±-----------------±-------+
结果表:
±-------------------±-------------+
| transactions_count | visits_count |
±-------------------±-------------+
| 0 | 4 |
| 1 | 5 |
| 2 | 0 |
| 3 | 1 |
±-------------------±-------------+

  • 对于 transactions_count = 0, visits 中 (1, “2020-01-01”), (2, “2020-01-02”), (12, “2020-01-01”) 和 (19, “2020-01-03”) 没有进行交易,所以 visits_count = 4 。
  • 对于 transactions_count = 1, visits 中 (2, “2020-01-03”), (7, “2020-01-11”), (8, “2020-01-28”), (1, “2020-01-02”) 和 (1, “2020-01-04”) 进行了一次交易,所以 visits_count = 5 。
  • 对于 transactions_count = 2, 没有客户访问银行进行了两次交易,所以 visits_count = 0 。
  • 对于 transactions_count = 3, visits 中 (9, “2020-01-25”) 进行了三次交易,所以 visits_count = 1 。
  • 对于 transactions_count >= 4, 没有客户访问银行进行了超过3次交易,所以我们停止在 transactions_count = 3 。

输入

在这里插入图片描述
在这里插入图片描述

分析

1 两表关联,查询出transaction_date也就是交易时间非空的数据,跟距transaction_date分组,对每组数据求和
2 对上一步求和的结果再次分组,求和,求出不同交易次数对应的日期有多少个
3 求出transaction_date为空的数据,也即是交易次数为0的日期数
4 上面的两个结果进行汇总
5 根据交易次数的最大值,生产一个从0到最大值的整数序列,将其放在一张临时表中
6 临时表和汇总表关联,求出所有交易次数对应的交易日期数

输出

with t1 as (-- 两表关联,查询出transaction_date也就是交易时间非空的数据,跟距transaction_date分组,对每组数据求和
    select transaction_date, count(1) as cnt
    from visits v
             left join transactions t
                       on v.user_id = t.user_id and v.visit_date = t.transaction_date
    where transaction_date notnull
    group by transaction_date),
     t2 as (-- 对上一步求和的结果再次分组,求和,求出不同交易次数对应的日期有多少个
         select cnt, count(1) as visits_count
         from t1
         group by cnt),
     t3 as (-- 求出transaction_date为空的数据,也即是交易次数为0的日期数
         select case when transaction_date is null then 0 end as cnt, count(1) as visits_count
         from visits v
                  left join transactions t
                            on v.user_id = t.user_id and v.visit_date = t.transaction_date
         where transaction_date is null
         group by transaction_date),
     t4 as (-- 上面的两个结果进行汇总
         select *
         from t2
         union all
         select *
         from t3),
     t5 as (-- 根据交易次数的最大值,生产一个从0到最大值的整数序列,将其放在一张临时表中
         SELECT generate_series(0, max(cnt)) AS sequence
         from t4)
-- 临时表和汇总表关联,求出所有交易次数对应的交易日期数
select sequence as transaction_count, coalesce(visits_count, 0) as visits_count
from t5
         left join t4 on t5.sequence = t4.cnt
order by transaction_count
;

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用Fay搭建了数字人

文章目录 流程server端ue端 小结 流程 大概是这么一个流程,先去配置server端,然后去配置ue端代码,再接着去android端的。一步一步来,一起学习学习。 server端 去git下载开源代码,然后按照指引一步一个脚印往下走。如…

未来之城:SIGMOD 2024大会在智利圣地亚哥点燃智能革命之火

会议之眼 快讯 2024 年 ACM SIGMOD Conference(国际数据管理大会)正在于 6月9日至6月14日在智利圣地亚哥举行。它由美国计算机学会(ACM)的数据管理特别兴趣小组(SIGMOD)主办,是中国计算机学会&…

7个强大的文字转语音TTS引擎

大家好,文本到语音(TTS)技术让机器能以人声般自然地“说话”,架起了人机沟通的新桥梁。开源TTS引擎以其开放性和经济性,成为热门工具,为智能应用注入活力。 文本到语音(TTS)引擎&am…

JVM 根可达算法

Java中的垃圾 Java中"垃圾"通常指的是不再被程序使用和引用的对象,具体表现在没有被栈、JNI指针和永久代对象所引用的对象。Java作为一种面向对象的编程语言,它使用自动内存管理机制,其中垃圾收集器负责检测和回收不再被程序引用的…

python-windows10普通笔记本跑bert mrpc数据样例0.1.048

python-windows10普通笔记本跑bert mrpc数据样例0.1.000 背景参考章节获取数据下载bert模型下载bert代码windows10的cpu进行训练进行预测注意事项TODOLIST背景 看了介绍说可以在gpu或者tpu上去微调,当前没环境,所以先在windows10上跑一跑,看是否能顺利进行,目标就是训练的…

弱智吧”,人类抵御AI的最后防线

“写遗嘱的时候错过了deadline怎么办?” “怀念过去是不是在时间的长河里刻舟求剑?” “英语听力考试总是听到两个人在广播里唠嗑,怎么把那两个干扰我做题的人赶走?” 以上这些饱含哲学但好像又莫名其妙的问题,出自…

【2024算力大会分会 | SPIE独立出版 | 往届均已完成EI检索】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)

【2024算力大会分会 | SPIE出版】 2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024) 2024 International conference on Cloud Computing, Performance Computing and Deep Learning *CCPCDL往届均已完成EI检索,最快会后4个半月完成! 一、…

Huggingface-cli 登录最新版(2024)

安装Huggingface-cli pip install -U "huggingface_hub[cli]"设置好git的邮箱和用户名和huggingface的github账号一致 git config --global user.mail xxx git config --global user.name xxx登录 复制token,划红线的地方,在命令行中点击右…

SQL 数据库学习 Part 1

数据和信息 信息 信息是客观存在的,是关于现实世界事物的存在方式或运动状态 数据 数据是用来记录信息的可识别的符号,是信息的具体表现形式 数据和信息的联系 数据是信息的符号表示或载体信息则是数据的内涵,是对数据的语义解释 数据…

专业级中文AI文图创作:智源中英双语AltDiffusion开源

AIGC 如火如荼发展的当下,中文世界的创作者常有几大痛点: 思考英文Prompts准确表达的绞尽脑汁,翻译软件词不达意的尴尬,精细构思的 Prompts 在画面生成中找不到一丝痕迹,亦或面对文化误解中的“中国风”哭笑不得…… …

计算机操作系统基础知识:什么是虚拟机?虚拟机的分类有哪些?他们之间的区别是什么?

谈到虚拟机就必须谈谈为什么虚拟机会出现?它解决了哪些问题。 1.虚拟机出现的原因 为了解决传统虚拟机物理资源极大浪费,且希望在一台机器上运行多个应用,且他们之间不相互影响的问题。 下面开始正式介绍虚拟机: 1.虚拟机的定义…

【PX4-AutoPilot教程-TIPS】PX4加速度计陀螺仪滤波器参数设置

PX4加速度计陀螺仪滤波器参数设置 前期准备滤波前FFT图滤波后FFT图 环境: 日志分析软件 : Flight Review PX4 :1.13.0 前期准备 进行滤波器参数设置的前提是飞机简单调试过PID已经可以稳定起飞,开源飞控的很多默认参数是可以让飞机平稳起…

一款开源的图片/视频无损放大神器,本地可用!

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 要说无损放大图片/视频分辨率,就绕不开在github上开源的一个图像/视频恢复的实用算法——Real-ESRGAN,截止目前已斩获26.6k的Star量。 RealESRGAN-gui 软件介绍…

C++240611

2.编程题: 以下是一个简单的 比喻,将 多态概念 与 生活中 的 实际情况相联系: 比喻:动物园的讲解员和动物表演 想象一下你去了一家动物园,看到了许多不同种类的动物, 如狮子、大象、猴子等。现在&#xff…

冰蝎4.1webshell实验

1、基础环境 生成payload 2、default_xor_base64 HTTP 命令执行 chunked数据回包,48 3、default_xor_base64 HTTPS 命令执行 终端 文件管理 4、 default_aes https 虚拟终端 5、 default_aes http 虚拟终端

基于微信小程序的“最多跑一次”警务信息管理系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:ssm 【…

【安卓13 源码】Input子系统(2) - input系统与应用进程通信

点击手机屏幕,可以分发input 事件到对应的view,由上一节知道input 是运行在system 进程的,那应用进程与系统进程是如何通讯的呢,相信本文可以给到一点小小的答案。 先给个结论:应用在resume 的时候才去建立与input 服…

Rust学习06:使用CSDN的AI工具“C知道”分析代码错误

朋友们,我最近真的是在绝望的边缘了! Rust咋这么蓝涅! 资料咋这们少涅! 记得学Python的时候,基本上你遇到的所有问题都可以在书上或者网上找到答案,中文世界找不到那么在英文世界一定能找到答案。 我猜&…

intel 660P SSD 512GB测评

** intel 660P SSD 512GB测评 ** PCIE 3.0X4 支持NVME 1.3协议 固件版本号HPS0 顺序Read速度1843MB\s 顺序Write速度946MB\s 4K随机Read速度275MB\s 4K随机Write速度592MB\s H2缓内Write速度671MB\s H2缓外Write速度368MB\s H2全盘Read速度870MB\s HDtune全盘Read速度1853MB\…

ModbusTCP、TCP/IP都走网线,一样吗?

在现代通信技术中,Modbus/TCP和TCP/IP协议是两种广泛应用于工业自动化和网络通信领域的协议。尽管它们都运行在网线上,但它们在设计、结构和应用场景上有着明显的区别。 Modbus/TCP协议是什么 Modbus/TCP是一种基于TCP/IP的应用层协议,它是Mo…