MySQL 中經常會有需要統計連續出現次數的場景,比如求某個數字出現的最長連續次數。下面我們來學習一下如何在 MySQL 中實現此功能。
假設我們有一個包含數字的表格:
CREATE TABLE `numbers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`number` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
數字表格如下:
+----+--------+
| id | number |
+----+--------+
| 1 | 0 |
| 2 | 1 |
| 3 | 1 |
| 4 | 0 |
| 5 | 1 |
| 6 | 1 |
| 7 | 1 |
| 8 | 0 |
| 9 | 0 |
| 10 | 1 |
+----+--------+
現在我們要找到數字列中連續出現相同數字的最大次數。我們可以使用如下 SQL 語句:
SELECT
number,
COUNT(*) AS cnt
FROM (
SELECT
number,
@idx := IF(@prev = number, @idx, @idx + 1) AS idx,
@prev := number
FROM
numbers,
(SELECT @prev := NULL, @idx := 0) AS init
ORDER BY id) AS t
GROUP BY idx, number;
結果為:
+--------+-----+
| number | cnt |
+--------+-----+
| 0 | 1 |
| 1 | 2 |
| 0 | 1 |
| 1 | 3 |
| 0 | 2 |
| 1 | 1 |
+--------+-----+
這個結果顯示了每個數字的連續出現次數以及出現的順序。對于我們的樣例表,3 是連續出現的最大次數。
+--------+----------+
| number | max_count |
+--------+----------+
| 0 | 2 |
| 1 | 3 |
+--------+----------+
通過上述 SQL 語句,我們可以計算出數字列中每個數字的連續出現次數,從而找到連續出現次數的最大值。
上一篇css獲取交點