LeetcodeブラシSQL 3、連続する数字
977 ワード
SQLクエリを作成し、少なくとも3回連続するすべての数字を検索します。
大体の考えを整理します。まず数字の出現回数を統計して、デフォルトの出現回数は1で、同じことがあったら+1で、違うことがあったらリセットして、調べてみます。そうすると、すべての数字の連続が最大値を出すことができます。そしてもう一度調べてください。
+----+-----+
| 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