601. 体育馆的人流量 难度:困难

本文介绍了一种解决 LeetCode 上特定问题的方法,该问题是关于如何统计连续体育场的人数记录,当人数不少于100时。通过使用 MySQL 的自定义变量和条件判断函数,实现了对连续记录的统计,并给出了完整的 SQL 查询示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、题目描述

在这里插入图片描述
来源:力扣(LeetCode)

2、解题思路

1# 首先,对连续出现不小于100的记录,进行记录连续次数:参考 185. 部门工资前三高的员工,这次只是用了if函数
(select stadium.*,if(people>=100,@i:=@i+1,@i:=0) as rec1 from stadium,(select @i:=0) a)add_r1,
在这里插入图片描述
2# 但是,排序后,想要倒序,然后,按照最大的记录数字,往下取数,太难操作了。
然后我想到了一个,技巧:再倒序排序,然后相加,这里新建一个子表:
elect id,if(people>=100,@j:=@j+1,@j:=0) as rec2 from stadium,(select @j:=0) b order by id desc
这里我把信息都显示出来,容易看:
在这里插入图片描述
3# 最后,rec1+rec2 as jude,只要jude>=4的就是了
4# 这一题出现率很高,顺便链接其他解法:
直接3表联查
使用group_concat()

3、提交记录

select id,visit_date ,people 
from(
select add_r1.*,rec1+rec2 as jude
from
(select stadium.*,if(people>=100,@i:=@i+1,@i:=0) as rec1
from stadium,(select @i:=0) a)add_r1,
(select id,if(people>=100,@j:=@j+1,@j:=0) as rec2
from stadium,(select @j:=0) b
order by id desc)add_r2
where add_r1.id=add_r2.id)add_jude
where jude>=4

437ms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值