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

news2024/11/23 21:58:05
  • 题目:

  • 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 RECURSIVE
        numbers AS (SELECT 0 AS num
                    UNION ALL
                    SELECT num + 1
                    FROM numbers
                    WHERE num < (select count(user_id) nu
                                 from Transactions
                                 group by user_id, transaction_date
                                 order by nu desc
                                 limit 1) -- 递归输出新的表
        ),
        t1 as (select v1.user_id, v1.visit_date, count(t.transaction_date) cou
               from Visits v1
                        left join Transactions T on v1.user_id = T.user_id and v1.visit_date = T.transaction_date
               group by v1.user_id, v1.visit_date), -- 连接两个表,算出每个人每天的次数
        t2 as (select cou, count(1) num
               from t1
               group by cou)
    select n1.num transactions_count, ifnull(t2.num, 0) visits_count -- 算出每个次数出现的次数
    from numbers n1
             left 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 pd
    
    def 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_date
    
        b=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.coloradmin.cn/o/2195837.html

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

相关文章

如何让客户主动成为你的品牌大使

在销售领域&#xff0c;转介绍被公认为一把无坚不摧的利器&#xff0c;它不仅铸就了高成交率的辉煌&#xff0c;更以惊人的速度缩短了成交周期。一位精通转介绍艺术的销售员&#xff0c;其业绩自然熠熠生辉&#xff0c;工作之路亦显得游刃有余。 然而&#xff0c;面对这一宝藏…

Bianchi模型、python计算及ns3验证_关于2~10 STA验证的补充

首先就是预设修改, NS3中bitrate是OfdmRate54Mbps,STA数目我设置了2-10,ack长度是14bytes,数据长36,头36(trace中只有1536和14两个长度,也就是数据长度1500,头36,ack14),SIFS和SLOT是16us和9us(在phy的定义中,11a的时候,sifs是16,slot是9),difs是34us(在bia…

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

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

【NLP自然语言处理】01-基础学习路径简介

目的&#xff1a;让大家能够在 AI-NLP 领域由基础到入门具体安排&#xff1a; NLP介绍 文本预处理RNN 及其变体&#xff08;涉及案例&#xff09;Transformer 原理详解迁移学习 和 Bert 模型详解 &#xff08;涉及案例&#xff09;特点&#xff1a; 原理 实践每个文章会有练习…

Nat. Commun.:飞秒激光书写受蚂蚁启发的可重构微型机器人集体

背景介绍生物在各种环境中的集体行为十分普遍&#xff0c;它们能够自发有序地完成单个个体难以完成的任务。目前&#xff0c;生物集体的形成主要分为两大类。第一类生物个体之间没有直接接触&#xff0c;如蜜蜂、鱼和鸟类&#xff0c;这导致这些集体不稳定&#xff0c;容易受到…

Ubuntu24 Firefox和Window Firefox同步问题

由于平常开发在Ubuntu系统&#xff0c;但是日常学习查资料又在Window系统&#xff0c;查资料保存网页到浏览器中时&#xff0c;经常遇到两个平台标签同步问题&#xff0c;希望可以选一个支持Ubuntu、Window的浏览器。 选用Google Chrome浏览器&#xff0c;确实挺好用&#xff…

微服务seata解析部署使用全流程

官网地址&#xff1a; Seata 是什么&#xff1f; | Apache Seata 1、Seata术语 用来管理分布式事务&#xff0c;由阿里巴巴出品。 【1、TC (Transaction Coordinator) - 事务协调者】 用来维护事务的&#xff0c;包括主事务和分支事务。 【2、TM (Transaction Manager) - …

TCP与UDP协议(三次握手四次挥手)

TCP与UDP 简介TCP和UDP一、TCP1.1 TCP的三次握手问题来了&#xff1a;为啥是三次握手而不是两次呢&#xff1f; 1.2建立连接后的通信过程&#xff08;丢包与乱序问题&#xff09;1.3四次挥手问题来了&#xff1a;为什么要四次挥手&#xff1f; 二、UDP 简介TCP和UDP TCP、UDP都…

机器学习笔记(持续更新)

重复值处理&#xff1a; 重复值处理代码&#xff1a; import pandas as pd data pd.DataFrame({学号: [1, 2, 3, 4, 5, 6, 7, 7, 8],身高: [172,162,175,170,168,160,164,164,160],体重: [70,62,75,68,67,58,64,64,53] }) data.drop_duplicates([学号], keep last, inplaceT…

SQL第13课挑战题

1. 使用inner join&#xff0c;以检索每个顾客的名称&#xff08;customers表中的cust_name&#xff09;和所有的订单号&#xff08;orders表中的order_num). 2. 修改第一题&#xff0c;仅列出所有顾客&#xff0c;及时他们没有下过订单。 3. 使用outer join联结products表和or…

【Easy RL】Easy RL蘑菇书全书学习笔记

【Easy RL】Easy RL蘑菇书全书学习笔记 第一章 强化学习基础1.1 强化学习概述监督学习强化学习与监督学习的不同之处二者的区别总结强化学习的特征强化学习的优越性预演&#xff08;rollout&#xff09;和 轨迹&#xff08;trajectory&#xff09;的概念端到端的概念深度强化学…

BurpSuite内置浏览器打不开(实用解决法/简便)

也不知道出现了什么问题就是莫名其妙的内置浏览器打不开&#xff0c;有时候不想配置代理很麻烦&#xff0c;这里实用的解决办法. 任务一 报错情况&#xff08;反正也看不懂&#xff09; 任务二 我们先去尝试打开这个运行模式&#xff0c;然后我们再去重试&#xff0c;如果还是打…

【重学 MySQL】五十九、二进制字符串类型与 JSON 类型

【重学 MySQL】五十九、二进制字符串类型与 JSON 类型 二进制字符串类型JSON类型 在MySQL数据库中&#xff0c;二进制字符串类型与JSON类型各自具有独特的特点和用途。 二进制字符串类型 二进制字符串类型在MySQL中主要用于存储二进制数据。这类数据类型包括BINARY、VARBINAR…

使用 ChatGPT Canvas 辅助 ABAP 开发

ChatGPT Canvas 是最近 OpenAI 推出的一个新功能,它不仅仅是一个简单的聊天对话式窗口。 Canvas 旨在扩展 ChatGPT 平台的功能,超越简单的问答交互。 Canvas 可以在单独的窗口中打开专用工作区,用户能够更直观、更高效地与 ChatGPT 在复杂的写作或者编码项目进行协作。 有…

Nginx08-反向代理

零、文章目录 Nginx08-反向代理 1、概述 关于正向代理和反向代理&#xff0c;我们在前面已经介绍过了&#xff0c;简而言之就是正向代理代理的对象是客户端&#xff0c;反向代理代理的是服务端&#xff0c;这是两者之间最大的区别。 Nginx即可以实现正向代理&#xff0c;也可…

【Unity】版本不一致且未升级资产,导致 Unity Sprite 2D 动画播放错误

自己的 Unity版本是 2022.3.45f1。目前折腾的这插件 2D Action RPG Engine: Mythril2D &#xff0c;推荐使用的 Unity 版本是 2021.3.18。 倒腾了这个 unity animation 动画半天&#xff0c;发现这个 animation sprite resolver 在导入动画帧的时候&#xff0c;一直都导入的是…

LeetCode 11 Container with Most Water 解题思路和python代码

题目&#xff1a; You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]). Find two lines that together with the x-axis form a container, such that the co…

【论文阅读】AUTOREGRESSIVE ACTION SEQUENCE LEARNING FOR ROBOTIC MANIPULATION

ABSTRACT 自回归模型在自然语言处理中取得了显著的成功。在这项工作中&#xff0c;我们为机器人操纵任务设计了一个简单而有效的自回归架构。我们提出了Chunking Causal Transformer&#xff08;cct&#xff09;&#xff0c;它扩展了因果关系transformers的下一个单标记预测 n…

Nginx07-静态资源访问

零、文章目录 Nginx07-静态资源访问 1、Nginx解决跨域问题 &#xff08;1&#xff09;同源策略 同源策略&#xff08;Same-Origin Policy&#xff09;是一个关键的网络安全概念&#xff0c;由Netscape公司在1995年引入&#xff0c;现在被所有现代浏览器所采用。它限制了从一…

基于JAVA的鲜花商城管理系统(源码+定制+讲解)鲜花商城管理系统、鲜花商城管理平台、鲜花商城信息管理、鲜花商城系统开发与应用、鲜花在线商城管理系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…