首页 > 数据库 >SQL连续查询问题拓展—记上海拼多多非技术岗面试真题

SQL连续查询问题拓展—记上海拼多多非技术岗面试真题

时间:2024-08-01 16:40:33浏览次数:13  
标签:非技术 p1 uid 真题 pay 连续 SQL 排序 SELECT

真巧,昨天刚写了关于数据库连续问题的解决方案,没想到今天下午两点就有朋友在上海拼多多面试非技术岗位中就遇到了相似的问题。下面是原题:

一个最大连续支付失败的次数 有一张支付流水表pay;字段如下

id uid time status
pay_01 1 2024-01-15 10:00:00 fail
pay_02 1 2024-01-15 10:00:20 success

求每个用户的最大连续支付失败次数
输出字段:uid,cnt(失败次数)

如果我朋友看过我昨天写的数据库查找连续数据的文章,那么至少会有一些思路,而不是写的一塌糊涂了哈哈哈。

思路

就像我昨天写的一样,连续问题,创造一个连续列来和目标判断是否连续的列相比较是比较简单的一种办法。
比如题目中,需要时间连续的某人最大的支付失败数量,那么就需要按照时间排序了,那么如何判断时间连续,题目中并没有规定时间的出现频次,所以直接和时间来做比较判断连续并不是一个好的解决办法。

这里其实最简单的就是生成两次行号了。
步骤
1.按照用户编号开窗,按照时间排序,增加行号,这样就得到了每个用户按照时间排序的订单序号。
2.筛选掉支付订单成功的,再根据用户编号开窗,按照时间排序,增加行号,这样就得到了每个用户按照时间排序的失败的订单的序号。
3.两个序号相减,相等的数字则表示连续。
4.按照用户和得到的数字分组,或者最大的组,就是最大的连续支付失败的订单数量。

WITH ContinueCustomer AS(
	SELECT p1.*, p1.rowNumber - RANK() over(PARTITION by p1.uid ORDER BY p1.time) as diff FROM (
	SELECT *,RANK() over(PARTITION by uid ORDER BY time) as rowNumber FROM pay
	) p1 WHERE p1.status = 'fail'
),
EveryContinueCustomerCounts AS(
	SELECT uid,count(1) as times FROM ContinueCustomer GROUP BY uid,diff
) 
SELECT uid,max(times) as cnt FROM EveryContinueCustomerCounts
总结

万变不离其宗,希望大家面试顺利。

标签:非技术,p1,uid,真题,pay,连续,SQL,排序,SELECT
From: https://www.cnblogs.com/qwqwQAQ/p/18336961

相关文章

  • 安装多个mysql
    下载文件wgethttps://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.39-linux-glibc2.28-x86_64.tar.xz解压到目录在文件夹建立my.cnf配置文件[client]port=3309socket=/data/mysql83309/mysqld.sock[mysqld_safe]socket=/data/mysql83309/mysqld.sock[mysq......
  • MySQL 学习笔记 进阶(InnoDB引擎 下)
    InnoDB引擎 InnoDB引擎-事务原理-概述事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。一致性(Co......
  • mysql优化sql:EXPLAIN各语法解释:
    当我们谈论数据库性能优化时,EXPLAIN是一个非常有用的工具,用于分析查询语句的执行计划。它能帮助我们理解数据库是如何执行查询的,以及是否能有效利用索引和其他优化策略。下面是一些关键的概念和术语,帮助你理解如何分析EXPLAIN的输出以优化查询性能:1.执行计划基础执行EXPLAI......
  • ETL数据集成丨快速将MySQL数据迁移至Doris数据库
    随着大数据技术的迅速发展,越来越多的企业开始寻求高效、灵活的数据存储与分析解决方案。ApacheDoris(原名Palo)作为一款高性能的MPP(大规模并行处理)分析型数据库,凭借其在OLAP场景下的卓越表现,逐渐成为数据仓库和商业智能领域的优选方案之一。本文旨在详细介绍如何利用ETLCloud平台,......
  • 四、MySQL函数
    MySQL函数常用函数SELECTNOW()SELECTCURDATE()聚合函数函数名称描述COUNT()计数SUM()求和AVG()平均值MAX()最大值MIN()最小值......--聚合函数--都能统计表中的数据(想查询一个表中有多少记录,使用count)SELECTCOUNT(borndate)FR......
  • 超详细的MySQL CRUD 并配备了大量的测试用例, 包教包会
    MySQL数据库表的增删查改CRUD:Create(创建),Retrieve(读取),Update(更新),Delete(删除)Create​INSERT[INTO]table_name[(column[,column]…)]VALUES(value_list)[,(value_list)]…value_list:value,[,value]…insert语句主要有两种情况,一种是全行插......
  • 使MySQL 8.5支持“Asia/Shanghai”格式时区配置
    默认情况下,MySQL不支持设置“Asia/Shanghai”格式时区信息,如根据数据记录的时区信息去转换时间时,会发生意想不到的空。“表达式1”会返回正常的时间转换结果:--表达式1SELECTCONVERT_TZ('2024-08-0111:04:04','+00:00','+08:00');“表达式2”会返回NULL:--表达式2SELE......
  • ctfhub-sql注入-injection-解题思路
    1.打开题目,判断是数字型注入还是字符型注入    1.输入1’  //无回显        1‘ --+//也是没有回显        1”  //无回显        1“--= //无回显都没有回显,所以判断为数字型注入2.使用命令进行判断......
  • nodejs 使用 sequelize 实现 mysql数据库的批量插入
    直接上代码:/***设置mysql连接,返回连接实例。连接格式:账户:密码@数据库地址/具体数据库名称***/constsetConnect=()=>{constsequelize=newSequelize(`mysql://${你的mysql地址}`,{logging:(...msg)=>Logger.INSTANCE.inf......
  • 从MySQL大量数据清洗到TiBD说起
    一、业务背景公司主要做的业务是类似贝壳的二手房租售,数据库中存了上亿级别的房源数据,之前数据库使用的是mysql,后面需要将mysql数据库切换成了Tidb,在切换的过程中,需要将老库的数据经过数据清洗后再存入新库(因为有一些表结构的设计变了),其中我们处理的一个逻辑就是将房间......