LeetcodeブラシSQL 3、連続する数字

977 ワード

SQLクエリを作成し、少なくとも3回連続するすべての数字を検索します。
+----+-----+
| Id | Num |
+----+-----+
| 1  |  1  |
| 2  |  1  |
| 3  |  1  |
| 4  |  2  |
| 5  |  1  |
| 6  |  2  |
| 7  |  2  |
+----+-----+
例えば、上記のLogsテーブルを与え、1は少なくとも3回連続して出現する唯一の数字である。
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1               |
+-----------------+
この問題には厄介な点があります。1、この数字の連続出現回数が3回以上あると判断します。2、連続出現回数が三回以上の数字を記録する。
大体の考えを整理します。まず数字の出現回数を統計して、デフォルトの出現回数は1で、同じことがあったら+1で、違うことがあったらリセットして、調べてみます。そうすると、すべての数字の連続が最大値を出すことができます。そしてもう一度調べてください。
SELECT DISTINCT
  al.Num AS ConsecutiveNums
FROM
  (SELECT
    @count := @count + (
      CASE
        WHEN @num = e.Num
        THEN 0
        ELSE 1
      END
    ) AS c,
    e.Num,
    @num := e.Num
  FROM
    LOGS e,
    (SELECT
      @count := 0) a,
    (SELECT
      @num := - 1) b) al
GROUP BY al.c,
  al.num
HAVING COUNT(*) >= 3
転載先:https://www.cnblogs.com/linux-java/p/9765178.html