1. 程式人生 > >LeetCode:資料庫技術【180-185】

LeetCode:資料庫技術【180-185】

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;
    
關於自聯結與子查詢: 自聯結通常作為外部語句用來替代 從相同表中檢索資料時使用的子查詢語句。雖然最終的結果是 相同的,但有時候處理聯結遠比處理子查詢快得多。應該試一 下兩種方法,以確定哪一種的效能更好