【发布时间】:2018-12-02 04:10:23
【问题描述】:
我正在做一个 leetcode 问题。得出了2个类似的答案。但我不知道为什么一个是错的,另一个是对的。以下是问题链接。目标是编写一个 SQL 查询来查找所有至少连续出现 3 次的数字。
https://leetcode.com/problems/consecutive-numbers/
桌子的样子
| Id | Num |
|----|-----|
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
正确的版本:
select distinct Num as ConsecutiveNums
from Logs, (select @prev := -1, @count := 0) as Init
where (@count := case when @prev = (@prev := Num) then @count + 1 else 1 end) >= 3
输出:
| ConsecutiveNums |
|-----------------|
| 1 |
错误的版本:
select distinct Num as ConsecutiveNums
from Logs, (select @prev := -1, @count := 0) as Init
where (case when @prev = (@prev := Num) then @count := @count + 1 else @count := 1 end) >= 3
输出:
| ConsecutiveNums |
|-----------------|
| 1 |
| 2 |
唯一的区别是 @count := 被移到 case end。
似乎 else 部分导致了一些错误,我的知识无法解释。
【问题讨论】:
-
您需要提供一些示例数据,其中查询失败并在问题中成功,而不是通过链接。
-
“但我不知道为什么”:这令人惊讶,因为第二个与 -10 相比.....似乎微不足道?
-
无论如何,两者都不正确,因为它们都假设记录将按
Num的顺序访问,这并不能保证。 -
没有样本数据或结果,这个问题不清楚。该链接指向一个带有 SQL Server 示例的站点,但问题显然是关于 MySQL 的。
-
感谢您帮助我。我刚刚更新了问题,使其格式良好。 @戈登