• [SQL]LeetCode601. 体育馆的人流量 | Human Traffic of Stadium


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10451553.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    SQL架构

     1 Create table If Not Exists stadium (id int, visit_date DATE NULL, people int)
     2 Truncate table stadium
     3 insert into stadium (id, visit_date, people) values ('1', '2017-01-01', '10')
     4 insert into stadium (id, visit_date, people) values ('2', '2017-01-02', '109')
     5 insert into stadium (id, visit_date, people) values ('3', '2017-01-03', '150')
     6 insert into stadium (id, visit_date, people) values ('4', '2017-01-04', '99')
     7 insert into stadium (id, visit_date, people) values ('5', '2017-01-05', '145')
     8 insert into stadium (id, visit_date, people) values ('6', '2017-01-06', '1455')
     9 insert into stadium (id, visit_date, people) values ('7', '2017-01-07', '199')
    10 insert into stadium (id, visit_date, people) values ('8', '2017-01-08', '188')

    X city built a new stadium, each day many people visit it and the stats are saved as these columns: id, visit_date, people

    Please write a query to display the records which have 3 or more consecutive rows and the amount of people more than 100(inclusive).

    For example, the table 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       |
    +------+------------+-----------+
    

    For the sample data above, the output is:

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

    Note:
    Each day only have one row record, and the dates are increasing with id increasing.


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

    请编写一个查询语句,找出高峰期时段,要求连续三天及以上,并且每天人流量均不少于100。

    例如,表 stadium

    +------+------------+-----------+
    | id   | 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   | date       | people    |
    +------+------------+-----------+
    | 5    | 2017-01-05 | 145       |
    | 6    | 2017-01-06 | 1455      |
    | 7    | 2017-01-07 | 199       |
    | 8    | 2017-01-08 | 188       |
    +------+------------+-----------+
    

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


    260ms

     1 # Write your MySQL query statement below
     2 select distinct t1.*
     3 from stadium t1, stadium t2, stadium t3
     4 where t1.people>=100 and t2.people>=100 and t3.people>=100
     5 and
     6 ((t1.id-t2.id=1 and t1.id-t3.id=2 and t2.id-t3.id=1)
     7 or
     8 (t2.id-t1.id=1 and t2.id-t3.id=2 and t1.id-t3.id=1)
     9 or
    10 (t3.id-t2.id=1 and t2.id-t1.id=1 and t3.id-t1.id=2))
    11 order by t1.id

    266ms

     1 # Write your MySQL query statement below
     2 
     3 select distinct t.* from 
     4 stadium t ,
     5 (
     6 select 
     7 t1.Id, t2.Id as t2Id, t3.Id as t3Id
     8 from (
     9 select * from stadium 
    10 where people>=100)  as t1
    11 left join
    12 (
    13 select * from stadium 
    14 where people>=100 ) as t2
    15 ON  t1.Id+1=t2.Id
    16 left join 
    17 (
    18 select * from stadium 
    19 where people>=100 ) as t3
    20 ON  t1.Id+2=t3.Id
    21 where (t2.Id is not null and t3.Id is not null)
    22 ) as b 
    23 where (t.Id=b.Id or t.Id=b.t2Id or t.Id=b.t3Id);

    268ms

     1 # Write your MySQL query statement below
     2 SELECT s1.id AS id
     3       ,s1.date AS date
     4       ,s1.people AS people
     5 FROM stadium s1, stadium s2, stadium s3
     6 WHERE(
     7     (s1.id = s2.id - 1 AND s1.id = s3.id - 2)
     8     OR (s1.id = s2.id + 1 AND s1.id = s3.id - 1)
     9     OR (s1.id = s2.id + 1 AND s1.id = s3.id +2)
    10     )
    11 AND s1.people >= 100
    12 AND s2.people >= 100
    13 AND s3.people >= 100
    14 GROUP BY s1.id;
  • 相关阅读:
    permute
    ind2sub
    randi( )函数--MATLAB
    ABAQUS复合材料
    matlab中fix函数,floor函数,ceil函数
    在windows10中卸载软件和取消开机启动程序
    在linux的tomcat中配置https及自动跳转
    解决ubuntu无法远程连接
    谷歌浏览器 插件安装配置Momentum chrome
    0903——元类
  • 原文地址:https://www.cnblogs.com/strengthen/p/10451553.html
Copyright © 2020-2023  润新知