游泳館的人流量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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章