力扣之1336.每次访问的交易次数

  • 题目:

  • sql建表语句:

  • Create table If Not Exists Visits (user_id int, visit_date date);
    Create table If Not Exists Transactions (user_id int, transaction_date date, amount int);
    Truncate table Visits;
    insert into Visits (user_id, visit_date) values ('1', '2020-01-01');
    insert into Visits (user_id, visit_date) values ('2', '2020-01-02');
    insert into Visits (user_id, visit_date) values ('12', '2020-01-01');
    insert into Visits (user_id, visit_date) values ('19', '2020-01-03');
    insert into Visits (user_id, visit_date) values ('1', '2020-01-02');
    insert into Visits (user_id, visit_date) values ('2', '2020-01-03');
    insert into Visits (user_id, visit_date) values ('1', '2020-01-04');
    insert into Visits (user_id, visit_date) values ('7', '2020-01-11');
    insert into Visits (user_id, visit_date) values ('9', '2020-01-25');
    insert into Visits (user_id, visit_date) values ('8', '2020-01-28');
    Truncate table Transactions;
    insert into Transactions (user_id, transaction_date, amount) values ('1', '2020-01-02', '120');
    insert into Transactions (user_id, transaction_date, amount) values ('2', '2020-01-03', '22');
    insert into Transactions (user_id, transaction_date, amount) values ('7', '2020-01-11', '232');
    insert into Transactions (user_id, transaction_date, amount) values ('1', '2020-01-04', '7');
    insert into Transactions (user_id, transaction_date, amount) values ('9', '2020-01-25', '33');
    insert into Transactions (user_id, transaction_date, amount) values ('9', '2020-01-25', '66');
    insert into Transactions (user_id, transaction_date, amount) values ('8', '2020-01-28', '1');
    insert into Transactions (user_id, transaction_date, amount) values ('9', '2020-01-25', '99');
  • 分析,刚看到这道题的时候,读题读了好几遍,有点难看懂,其实这道题的难点就是怎么遍历的输出出现的次数,这里首先我先想到了递归,但是呢,我刚开始的时候没有看清楚那个最大值,一直不知道这个递归的条件怎么写,最后才发现是访问的最大次数,并不是访问出现的最大次数,这里我们可以首先算出最大的访问次数,可以直接按照Transactions 表中user_id, transaction_date分组,然后算出count排序,取出最大值,然后左连接两个表,算出每个用户每天访问的次数,然后在按照次数分组,算出每个次数出现的次数,然后再与递归的表进行左连接,把为空的值换成零,就完成了。图表分析:

  • sql实现:

  • 
    WITH RECURSIVEnumbers AS (SELECT 0 AS numUNION ALLSELECT num + 1FROM numbersWHERE num < (select count(user_id) nufrom Transactionsgroup by user_id, transaction_dateorder by nu desclimit 1) -- 递归输出新的表),t1 as (select v1.user_id, v1.visit_date, count(t.transaction_date) coufrom Visits v1left join Transactions T on v1.user_id = T.user_id and v1.visit_date = T.transaction_dategroup by v1.user_id, v1.visit_date), -- 连接两个表,算出每个人每天的次数t2 as (select cou, count(1) numfrom t1group by cou)
    select n1.num transactions_count, ifnull(t2.num, 0) visits_count -- 算出每个次数出现的次数
    from numbers n1left join t2 on n1.num = t2.cou
    order by transactions_count  -- 连接递归表和出现次数的表,然后把空值换成0,按照transactions_count 排序
  • pandas例子代码:

  • data = [[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']]
    visits = pd.DataFrame(data, columns=['user_id', 'visit_date']).astype({'user_id':'Int64', 'visit_date':'datetime64[ns]'})
    data = [[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 = pd.DataFrame(data, columns=['user_id', 'transaction_date', 'amount']).astype({'user_id':'Int64', 'transaction_date':'datetime64[ns]', 'amount':'Int64'})
  • pandas分析:

  • 我们首先先连接两个表,使用左连接,连接条件为user_id=user_id,visit_date=transaction_date,然后我们再按照user_id和visit_date分组,然后在算出transaction_date的值,会分别算出每个人每天的次数,然后我们在按照次数分组,算出每个次数有多少次,然后找出次数最大值,然后建一个新的dataframe对象,新增一列使用for循环添加数据,循环条件是最大值,然后再把这两个表通过次数左连接,然后给空值替换成0,就完成了这道题

  • pandas实现:

  • import pandas as pddef draw_chart(visits: pd.DataFrame, transactions: pd.DataFrame) -> pd.DataFrame:a=pd.merge(visits,transactions,left_on=['user_id','visit_date'],right_on=['user_id','transaction_date'],how='left')   -- 连接两个表,使用左连接,连接条件为user_id=user_id,visit_date=transaction_dateb=a.groupby(['user_id','visit_date'])['transaction_date'].count().reset_index()  -- 按照'user_id','visit_date'分组,算出每个组内的transaction_date的个数c=b.groupby(['transaction_date'])['user_id'].count().reset_index() -- 按照每个人的次数分组,算出每个次数出现的次数ee=pd.DataFrame()  -- 创建一个新的dataframe对象ee['transactions_count']=[i for i in range(c['transaction_date'].max()+1)]     -- 添加一列,值为次数出现的最大值的循环                    o=pd.merge(ee,c,left_on='transactions_count',right_on='transaction_date',how='left').fillna(0).sort_values(['transactions_count'])  -- 连接两个表o=o[['transactions_count','user_id']] -- 取出所需要的两列o.columns=['transactions_count','visits_count']  -- 修改该列名return o

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

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

相关文章

Unity3d使用JsonUtility.FromJson读取json文件

使用JsonUtility.FromJson方法不需要额外引用第三方库。该方法只能读取json对象&#xff0c;而不能读取json数组。 假如我们有如下的json数组&#xff1a; [ {"id":1, "name":"first2021", "level":5, "score":100, "…

The 2024 ICPC Kunming Invitational Contest F. Collect the Coins(二分)

在知乎内查看 题目 思路来源 官方题解 题解 一旦某个速度v满足&#xff0c;那么大于速度v的都满足&#xff0c;所以可以被二分&#xff0c;但是二分的check不好想&#xff0c;卡住了 最后去看了题解&#xff0c;其实维护的是&#xff0c;一个机器人在目标点收集硬币时&…

UGUI(三大现成UI控件)

Rawimage 可以是任意类型的图&#xff0c;所以这里的泛型就更宽泛&#xff0c;不止sprite 相比Image唯二的不同 uvrect有点像平铺 Text suddenly come to a Free island. best fit开启后会有范围选择 Image image 组件是挂在RectTransform的ui下的&#xff0c;换句话说&…

windows C++-创建数据流代理(二)

完整的数据流演示 下图显示了 dataflow_agent 类的完整数据流网络&#xff1a; 由于 run 方法是在一个单独的线程上调用的&#xff0c;因此在完全连接网络之前&#xff0c;其他线程可以将消息发送到网络。 _source 数据成员是一个 unbounded_buffer 对象&#xff0c;用于缓冲…

整理/删除重复文件

文件分类 #!/bin/bash if [ "$#" -ne 1 ]; thenecho "use: $0 <download_url>"exit 1 fi TARGET_DIR"$1" mkdir -p "$TARGET_DIR/jpg" mkdir -p "$TARGET_DIR/mp4" for img in "$TARGET_DIR"/*.jpg; doif…

k8s 中的 PV 的动态供给

目录 1 存储类 Storageclass 介绍 1.1 StorageClass 说明 1.2 StorageClass 的属性 2 存储分配器 NFS Client Provisioner 2.1 官网存储分配器的部署介绍 2.2 实现动态创建 PV 模版清单文件的介绍 2.2.1 Storageclass 存储类的模版 2.2.2 创建 Provisioner 制备器的模版 2.2.3…

ctf.bugku - POST

题目来源 &#xff1a;POST - Bugku CTF 访问请求&#xff0c;返回如下信息&#xff1b; 从这里可以得到信息&#xff1b;想要得到flag &#xff0c;需要发送post请求&#xff0c;并且请求带有what参数&#xff0c;参数值为flag 构造消息体&#xff1b; burpsuite中&#x…

连续点击三次用户

有用户点击日志记录表 t2_click_log&#xff0c;包含user_id(用户ID),click_time(点击时间)&#xff0c;请查询出连续点击三次的用户数&#xff0c; 连续点击三次&#xff1a;指点击记录中同一用户连续点击&#xff0c;中间无其他用户点击&#xff1b; CREATE TABLE t2_click…

仿小米的Disucz模板

整套模板是忽悠兄原创设计开发&#xff0c;这是一款简约大气的模板&#xff0c;保留Discuz预留功能&#xff0c; 必须一键式配置完成&#xff0c;使用插件配置到位&#xff0c;专业的网站肯定不使用DIY啦&#xff0c;二次开发了大部分功能&#xff0c; 更强大&#xff0c;别人…

微信小程序开发-配置文件详解

文章目录 一&#xff0c;小程序创建的配置文件介绍二&#xff0c;配置文件-全局配置-pages 配置作用&#xff1a;注意事项&#xff1a;示例&#xff1a; 三&#xff0c;配置文件-全局配置-window 配置示例&#xff1a; 四&#xff0c;配置文件-全局配置-tabbar 配置核心作用&am…

C++笔记之原子操作

C++笔记之原子操作 code review! 文章目录 C++笔记之原子操作1.初始化2.赋值3.取值4.赋给另一个原子类型5.`exchange`6.`compare_exchange_weak` 和 `compare_exchange_strong`使用场景7.注意事项在 C++ 中,原子类型提供了对共享变量的无锁操作,确保多线程环境下的安全。以下…

Linux搭建Hadoop集群(详细步骤)

前言 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威力进行高速运算和存储。 说白了就是实现一个任务可以在多个电脑上计算的过程。 一&#xff1a;准备工具 1.1 VMware 1.2L…

免费高可用软件

高可用软件是指那些能够提供高可用性、高可靠性的软件&#xff0c;它们在各种应用场景下都能确保系统的稳定运行。以下是四款免费的高可用软件&#xff0c;它们在不同领域都表现出色&#xff0c;能够满足各种高可用性需求。 一、PanguHA PanguHA是一款专为Windows平台设计的双…

计算机的错误计算(一百一十六)

摘要 计算机的错误计算&#xff08;一百一十&#xff09;分析了&#xff08;二&#xff09;中例1循环迭代错误计算的原因。应读者建议&#xff0c;本节将用错数讨论其例2的错误计算原因。 例1. 已知 计算 在 的错数&#xff0c;并用实例分析计算过程中的错误数字数量。…

设计模式之适配器模式(Adapter)

一、适配器模式介绍 适配器模式(adapter pattern )的原始定义是&#xff1a;将类的接口转换为客户期望的另一个接口&#xff0c; 适配器可以让不兼容的两个类一起协同工作。 适配器模式是用来做适配&#xff0c;它将不兼容的接口转换为可兼容的接口&#xff0c;让原本由于接口…

2024Java最新面试题总结(针对于一些小厂、中厂)

这是根据个人面试经历总结出来的一些经验希望可以帮助到有需要的人。 面试的时候&#xff0c;会先让你进行自我介绍&#xff0c;这个大家准备一两分钟的面试稿就可以。然后就是正式面试&#xff0c;面试官一般是两个人以上&#xff0c;开始&#xff0c;面试官会先提问一些基本…

GRASP七大基本原则+纯虚构防变异

问题引出 软件开发过程中&#xff0c;需要设计大量的类&#xff0c;使他们交互以实现特定的功能性需求。但是不同的设计方式&#xff0c;对程序的非功能性需求&#xff08;可扩展性&#xff0c;稳定性&#xff0c;可维护性等&#xff09;的实现程度则完全不同。 有没有一种统一…

C++核心编程和桌面应用开发 第八天(继承)

目录 1.继承 1.1继承语法 1.2继承方式 1.3继承中的对象模型 1.4继承中的构造和析构 1.5继承中的同名成员处理 1.5.1同名属性处理 1.5.2同名成员函数处理 1.6继承中的同名静态成员处理 1.6.1同名静态成员属性处理 1.6.2同名静态成员函数处理 1.7多继承 1.继承 1.1继…

『网络游戏』自适应制作登录UI【01】

首先创建项目 修改场景名字为SceneLogin 创建一个Plane面板 - 将摄像机照射Plane 新建游戏启动场景GameRoot 新建空节点重命名为GameRoot 在子级下创建Canvas 拖拽EventSystem至子级 在Canvas子级下创建空节点重命名为LoginWnd - 即登录窗口 创建公告按钮 创建字体文本 创建输入…

数据结构——栈与队列的实现(全码)

一 栈的概念 栈是一种特殊的线性表&#xff0c;栈内数据遵循先进后出(LIFO)的原则&#xff0c;对于栈&#xff0c;只能在同一侧进行入栈和出栈操作。 入栈操作和出栈操作是在栈的同一侧进行的&#xff0c;如图示&#xff1a; 对于栈这种数据类型&#xff0c;我们可以采用链表或…