LeetCode601-MySQL-체육관 사람 유동량

1876 단어 LeetCode.SQL
X시는 새로운 체육관을 건설했는데 일일 유동량 정보는 이 세 열의 정보에 기록되었다. 그것이 바로 번호(id), 날짜(date), 유동량(people)이다.
조회 문구를 작성하여 러시아워 시간대를 찾아내고 3일 이상 연속해야 하며 매일 인원 유동량이 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       |
+------+------------+-----------+

1, 연속 3 일 및 이상 인구 100 - 3 표 이상
2. 3일 이상의 상황을 고려한다. 날짜 순서는 다음과 같다.
123
213
312
321
4가지
무슨 뜻이죠?
예를 들어 id=5, 6, 7, 8의 날짜에 대해 id가 6인 데이터가 표s1에 포지셔닝된다고 가정한다.
조건에 부합되는 5, 6, 7의 경우 그 위치는 2이다.
조건에 부합되는 6, 7, 8의 위치는 1이다.
만약 id=4도 100보다 많은 인원수에 부합한다면 조건에 부합되는 4, 5, 6의 위치는 3.
이들 4종(123·213·312·321)은 모든 상황을 담아 조건에 맞고 3일 이상 연속된 데이터를 넣기 위한 직관적 목적이 있다는 것이다.
So show you my code:
# Write your MySQL query statement below
SELECT DISTINCT s1.*
FROM stadium s1, stadium s2, stadium s3
WHERE s1.people >= 100 AND s2.people >= 100 AND s3.people>=100 AND
        (
            (s2.id-1=s1.id AND s3.id-1=s2.id AND s3.id-2=s1.id) OR
            (s3.id-1=s1.id AND s1.id-1=s2.id AND s3.id-2=s2.id) OR
            (s2.id-1=s1.id AND s1.id-1=s3.id AND s2.id-2=s3.id) OR
            (S1.id-1=s2.id AND s2.id-1=s3.id AND s1.id-2=s3.id)
        )
ORDER BY id 

좋은 웹페이지 즐겨찾기