游泳馆的人流量SQl

游泳馆的人流量SQl
无迪卡尔积,无高阶函数。思路清晰

X 市建了一个新的体育馆,每日人流量信息被记录在这三列信息中:序号 (id)、日期 (visit_date)、 人流量 (people)。

请编写一个查询语句,找出人流量的高峰期。高峰期时,至少连续三行记录中的人流量不少于100。

例如,表 stadium:

±-----±-----------±----------+
| id | visit_date | people |
±-----±-----------±----------+
| 1 | 2017-01-01 | 10 |
| 2 | 2017-01-02 | 109 |
| 3 | 2017-01-03 | 150 |
| 4 | 2017-01-04 | 99 |
| 5 | 2017-01-05 | 145 |
| 6 | 2017-01-06 | 1455 |
| 7 | 2017-01-07 | 199 |
| 8 | 2017-01-08 | 188 |
±-----±-----------±----------+
对于上面的示例数据,输出为:

±-----±-----------±----------+
| id | visit_date | people |
±-----±-----------±----------+
| 5 | 2017-01-05 | 145 |
| 6 | 2017-01-06 | 1455 |
| 7 | 2017-01-07 | 199 |
| 8 | 2017-01-08 | 188 |
±-----±-----------±----------+

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/human-traffic-of-stadium
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
https://leetcode-cn.com/problems/human-traffic-of-stadium/solution/qiu-ba-ba-men-zhao-cuo-wu-di-qia-er-ji-wu-gao-jie-/

解题思路

  • 第一步、一个id关联 自身及附近的id (如T1.id=2 则T2.id = 1、2、3 共三条记录 均满足关联条件)
    在这里插入图片描述
  • 第二步、过滤掉100以下的id,然后统计该id关联出来的数据条数,如果数量等于三,则代表 1、2、3一定均大于100。
    在这里插入图片描述
  • 第三步、利用查询出的ID 回关联原表 并去重(第三步需要注意 如果id=2符合条件,则代表id=1、id=3也符合条件)
    在这里插入图片描述
    作者:zha-yan
    链接:https://leetcode-cn.com/problems/human-traffic-of-stadium/solution/qiu-ba-ba-men-zhao-cuo-wu-di-qia-er-ji-wu-gao-jie-/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
SELECT DISTINCT TT.* FROM stadium TT
INNER JOIN (
SELECT T1.id,COUNT(*) FROM stadium T1
INNER JOIN stadium T2
ON( T1.id=T2.id
OR T1.id=T2.id+1
OR T1.id=t2.id-1
)
WHERE T2.people>100
GROUP BY T1.id
HAVING COUNT(*)>=3
) TID
ON TT.id=TID.id
OR TT.id+1=TID.id
OR TT.id-1=TID.id
发布了21 篇原创文章 · 获赞 6 · 访问量 9314

猜你喜欢

转载自blog.csdn.net/qq1032350287/article/details/104009911