title: Write a SQL query to find all numbers that appear at least three times
body: <p>I'm practicing SQL language and got a question like: </p>
  
  <p>Write a SQL query to find all numbers that appear at least three times consecutively.</p>
  
  <pre><code>+----+-----+
  | Id | Num |
  +----+-----+
  | 1  |  1  |
  | 2  |  1  |
  | 3  |  1  |
  | 4  |  2  |
  | 5  |  1  |
  | 6  |  2  |
  | 7  |  2  |
  +----+-----+
  </code></pre>
  
  <p>For example, given the above Logs table, 1 is the only number that appears consecutively for at least three times.</p>
  
  <p>I got a solution online and test it. But I really do not understand it. The big
  picture of the solution is clear. <code>sq</code> table counts the occurrences. But I did not understand the part of computing the <code>sq</code>. I've done a lot of research on the MYSQL. <code>@counter := IF(@prev = Num, @counter + 1, 1)</code> means if prev = Num, making counter = counter + 1, otherwise counter = 1. <code>(SELECT @counter:=1, @prev:=NULL) vars</code> means create a table <code>vars</code> which includes two columns <code>counter</code> and <code>pre</code>.</p>
  
  <p>Can anyone help me explain the logic of the <code>sq</code> part? Or is there any tutorial for this kind of expressions in the <code>SELECT</code>? I'm totally new to SQL and I know this question may be pretty simple. Thanks for your help! </p>
  
  <pre><code>SELECT  DISTINCT(Num) AS ConsecutiveNums
  FROM (
      SELECT
      Num,
      @counter := IF(@prev = Num, @counter + 1, 1) AS how_many_cnt_in_a_row,
      @prev := Num
      FROM Logs y, (SELECT @counter:=1, @prev:=NULL) vars
  ) sq
  WHERE how_many_cnt_in_a_row &gt;= 3
  </code></pre>