LeetCode:資料庫技術【180-185】
阿新 • • 發佈:2018-11-05
LeetCode:資料庫技術【180-185】
180.連續出現的數字
題目描述
編寫一個 SQL 查詢,查詢所有至少連續出現三次的數字。
+----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+
例如,給定上面的 Logs
表, 1
是唯一連續出現至少三次的數字。
+-----------------+ | ConsecutiveNums | +-----------------+ | 1 | +-----------------+
題目分析
這道題目已經不是基礎題目了,我們需要轉換思維了。題目中明確說了是連續出現了三次相同值的值,我們在單張表中已經無法掌握了,只能使用自聯結來處理。
SELECT DISTINCT l1.Num AS ConsecutiveNums FROM Logs l1,Logs l2,Logs l3 WHERE l2.Id = l1.Id+1 AND l3.Id = l2.Id+1 AND l1.Num =L2.Num AND l2.Num =l3.NUm;
關於自聯結與子查詢: 自聯結通常作為外部語句用來替代 從相同表中檢索資料時使用的子查詢語句。雖然最終的結果是 相同的,但有時候處理聯結遠比處理子查詢快得多。應該試一 下兩種方法,以確定哪一種的效能更好