Leetcode 601. 体育馆的人流量
本文最后更新于298 天前,其中的信息可能已经过时,如有错误请发送邮件到2446865563@qq.com

1.题目基本信息

1.1.题目描述

表:Stadium

+---------------+---------+

| Column Name | Type |

+---------------+---------+

| id | int |

| visit_date | date |

| people | int |

+---------------+---------+

visit_date 是该表中具有唯一值的列。

每日人流量信息被记录在这三列信息中:序号 (id)、日期 (visit_date)、 人流量 (people)

每天只有一行记录,日期随着 id 的增加而增加

编写解决方案找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录。

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

1.2.题目地址

https://leetcode.cn/problems/human-traffic-of-stadium/description/

2.解题方法

2.1.解题思路

先将people>=100的记录标记为0,其余的标记为1,使用flag字段记录,然后使用窗口函数统计flag的和,记为flag_sum字段,然后根据flag_sum字段窗口聚合

2.2.解题步骤

第一步,将people>=100的记录标记为0,其余的标记为1,使用flag字段记录;然后使用窗口函数统计flag的和,记为flag_sum字段,得到表格T1

第二步,筛选出people>=100的记录,并在这个表格的基础上,使用窗口函数统计flag_sum对应的各个记录的个数,记为cnt字段,得到表格T2

第三步,在T2的基础上,筛选出cnt>=3的记录,并使用visit_date进行升序排列,即得到题解

3.解题代码

sql代码

# Write your MySQL query statement below

# 思路:先将people>=100的记录标记为0,其余的标记为1,使用flag字段记录,然后使用窗口函数统计flag的和,记为flag_sum字段,然后根据flag_sum字段窗口聚合
with T1 AS (
    # 第一步,将people>=100的记录标记为0,其余的标记为1,使用flag字段记录;然后使用窗口函数统计flag的和,记为flag_sum字段,得到表格T1
    SELECT 
        *, 
        SUM(IF(people >= 100, 0, 1)) OVER (ORDER BY id) AS flag_sum
    FROM Stadium
), T2 AS (
    # 第二步,筛选出people>=100的记录,并在这个表格的基础上,使用窗口函数统计flag_sum对应的各个记录的个数,记为cnt字段,得到表格T2
    SELECT 
        *, 
        COUNT(*) OVER (PARTITION BY flag_sum) AS cnt
    FROM T1 
    WHERE people >= 100
)

# 第三步,在T2的基础上,筛选出cnt>=3的记录,并使用visit_date进行升序排列,即得到题解
SELECT id, visit_date, people
FROM T2
WHERE cnt >= 3
ORDER BY visit_date

4.执行结果

觉得有帮助可以投喂下博主哦~感谢!

作者:geek007

转载请注明文章地址及作者哦~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇