180. Consecutive Numbers
表格: Logs
+-------------+---------+
+-------------+---------+
| 欄位名稱 | 類型 |
+-------------+---------+
| id | int |
| num | varchar |
+-------------+---------+
在 SQL 中,id 是這個表格的主鍵。 id 是自動遞增的欄位。
找到所有連續出現至少三次的數字。
以任何順序返回結果表。
結果格式如下例所示。
找到所有連續出現至少三次的數字。
以任何順序返回結果表。
結果格式如下例所示。
範例 :
輸入: Logs 表格:
+----+-----+
| id | num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
輸出:
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1 |
+-----------------+
解釋: 1 是唯一一個連續出現至少三次的數字。
解釋: 1 是唯一一個連續出現至少三次的數字。
MySQL
SELECT DISTINCT l1.num AS ConsecutiveNums
FROM Logs l1
JOIN Logs l2 ON l1.id = l2.id - 1
JOIN Logs l3 ON l2.id = l3.id - 1
WHERE l1.num = l2.num AND l2.num = l3.num;
1385ms
Pandas
import pandas as pd
def consecutive_numbers(logs: pd.DataFrame) -> pd.DataFrame:
logs.sort_values(['id'], inplace = True)
logs = logs[(logs.num == logs.num.shift(1)) &
(logs.num == logs.num.shift(2)) &
(logs.id == logs.id.shift(1)+1) &
(logs.id == logs.id.shift(2)+2)
].drop_duplicates('num')
return logs.iloc[:,[1]].rename(columns = {'num':'ConsecutiveNums'})
66.04MB, 539ms
PostgreSQL
-- Write your PostgreSQL query statement below
SELECT DISTINCT l1.num AS ConsecutiveNums
FROM
Logs l1
JOIN Logs l2 ON l1.id + 1 = l2.id
JOIN Logs l3 ON l2.id + 1 = l3.id
WHERE
l1.num = l2.num
AND l2.num = l3.num;
0.00MB, 286ms