版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
题目描述
X 市建了一个新的体育馆,每日人流量信息被记录在这三列信息中:序号 (id)、日期 (visit_date)、 人流量 (people)。
请编写一个查询语句,找出人流量的高峰期。高峰期时,至少连续三行记录中的人流量不少于100。
题解
SELECT A.*
FROM
stadium A
INNER JOIN
stadium B
ON A.id=B.id+1
INNER JOIN
stadium C
ON A.id=C.id+2
WHERE A.people>=100
AND B.people>=100
AND C.people>=100
UNION
SELECT B.*
FROM
stadium A
INNER JOIN
stadium B
ON A.id=B.id+1
INNER JOIN
stadium C
ON A.id=C.id+2
WHERE A.people>=100
AND B.people>=100
AND C.people>=100
UNION
SELECT C.*
FROM
stadium A
INNER JOIN
stadium B
ON A.id=B.id+1
INNER JOIN
stadium C
ON A.id=C.id+2
WHERE A.people>=100
AND B.people>=100
AND C.people>=100
ORDER BY id;
解题思路
这一题和我们上次做过的一个题很像
SQL LeetCode刷题系列(六)——连续出现的数字
但是连续出现的数字只需要把数字选出来就可以了,同样用到了三表联合,而这一题不仅仅要用到三表联合,还要将连续不少于100的人流量记录筛选出来,所以会连续union两次