首页 > 数据库 >力扣601(MySQL)-体育馆的人的流量(困难)

力扣601(MySQL)-体育馆的人的流量(困难)

时间:2023-03-31 10:12:50浏览次数:50  
标签:601 people visit 力扣 num MySQL date 100 id

题目:

表:Stadium

编写一个 SQL 查询以找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录。

返回按 visit_date 升序排列 的结果表。

查询结果格式如下所示

示例1:

  

解释:
id 为 5、6、7、8 的四行 id 连续,并且每行都有 >= 100 的人数记录。
请注意,即使第 7 行和第 8 行的 visit_date 不是连续的,输出也应当包含第 8 行,因为我们只需要考虑 id 连续的记录。
不输出 id 为 2 和 3 的行,因为至少需要三条 id 连续的记录。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/human-traffic-of-stadium
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

通用解法:连续N天,只要是连续的,都可以用等差的思想; 即(用某个连续字段 - 行号/排行 ),若是连续的,差值一定相同,再统计相同差值的个数即可。

①先筛选出people >= 100的数据,再给筛选后的数据以id进行连续排序,然后计算id与排序号的差值;

1 SELECT id,visit_date,people,id - (dense_rank() over(order by id)) as diff_num
2 FROM stadium_601
3 WHERE people >= 100;

 ②再以第一步查询到的diff_num分组,统计差值相同的个数;

1 SELECT a.id,a.visit_date,a.people,count( a.id ) over ( PARTITION BY a.diff_num ) AS cout 
2 FROM (
3         SELECT id,visit_date,people,id - (dense_rank() over(order by id)) AS diff_num
4         FROM stadium_601
5         WHERE people >= 100
6  )AS a 

③根据上一步的查询结果,筛选出cout >= 3的数据,再按visit_date升序排列输出即可。

 1 select id, visit_date, people
 2 from (
 3     select id,visit_date,people,count(id) over (partition by diff_num) as cout
 4     from(
 5        select id,visit_date,people,id - (dense_rank() over (order by id) ) as diff_num
 6        from Stadium
 7        WHERE people >= 100
 8        ) as a
 9     ) as b
10 where b.cout >= 3
11 order by visit_date;

标签:601,people,visit,力扣,num,MySQL,date,100,id
From: https://www.cnblogs.com/liu-myu/p/17275334.html

相关文章

  • MySQL按日期分组统计(按天统计,按月统计)
    按月统计(一)selectdate_format(create_time,'%Y-%m')mont,count(*)counfromt_contentgroupbydate_format(create_time,'%Y-%m');按天统计(二)selectdate_format(create_time,'%Y-%m-%d')dat,count(*)counfromt_contentgroupby......
  • MySQL数据库面试题
    数据库三大范式是什么第一范式:每个列都不可以再拆分。第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理......
  • MySQL主键的一些思考
    MySQL创建表的时候可以不设置主键吗?MySQL创建表的时候是可以不主动设置主键的,但是表是一定需要一个主键的,MySQL会主动将第一个不为null的唯一索引设置为主键为什么MySQL推荐使用自增id作为主键?MySQL官方推荐不要使用uuid或者不连续不重复的雪花作为主键,而是使用连续自增的主键id......
  • MySQL
    1.mysql安装连接1.1安装mysql5.71、解压2、把这个包放到自己的电脑环境目录下3、配置环境变量4、新建mysql配置文件ini[mysq1d]#目录一定要换成自己的basedir=D:\Environmentmysq1-5.7.19\datadir=D:\Environment\mysq1-5.7.19\data\port=3306skip-grant-tables5、启......
  • Mysql 事务隔离机制、锁机制、MVCC多版本并发控制隔离机制、日志机制、
    原子性(Atomicity)当前事务的操作要么同时成功,要么同时失败。原子性由undolog日志来实现。一致性(Consistency):使用事务的最终目的,由其它3个特性以及业务代码正确逻辑来实现。隔离性(lsolation):在事务并发执行时,他们内部的操作不能互相干扰,隔离性由MySQL的各种锁以及MVC......
  • 实战SQL优化(以MySQL深分页为例)
    1准备表结构CREATETABLE`student`(`id`intNOTNULLAUTO_INCREMENT,`user_no`varchar(50)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciNULLDEFAULTNULL,`user_name`varchar(50)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciNULLDEFAULTNULL......
  • MySQL常用命令
    常用命令:https://blog.csdn.net/qq_38328378/article/details/80858073最详细的:https://blog.csdn.net/qq_34115899/article/details/81190461......
  • MySQL数据库怎么创建表?MySQL数据库基础知识
    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品。MySQL最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库......
  • 22、MySQL主从复制详解及配置
    主从复制的介绍MySQL主从复制是指将一个MySQL服务器的数据复制到其他MySQL服务器上的过程。在主从复制中,一个MySQL服务器(称为“主服务器”或“主节点”)充当源,另一个或多个MySQL服务器(称为“从服务器”或“从节点”)充当目标。主服务器将更新和更改记录到二进制日志(binaryl......
  • MySQL、Redis和Elasticsearch比较
    MySQL是一种关系型数据库管理系统,它被广泛用于存储结构化数据。拥有极高的可靠性和安全性,支持ACID事务,并具有良好的扩展性,可以适应高并发访问的场景。Redis是一种内存......