我正在研究以下 mysql:
select num, @record,
case
when @record = num then @count:=@count+1
when @record <> @record:=num then @count:=1 end as n
from
Logs ,(select @count:=0,@record:=(SELECT num from Logs limit 0,1)) r
日志表的位置如下:
+----+-----+
| Id | Num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
查询的输出如下:
|num | @record | n |
----------------------
| 1 | "1" | 1.0 |
| 1 | "1" | 2.0 |
| 1 | "1" | 3.0 |
| 2 | "1" | 1.0 |
| 1 | "2" | 1.0 |
| 2 | "1" | 1.0 |
| 2 | "2" | 2.0 |
对于第二行和第三行,我很难理解是如何导出的。例如,在 row_1 (Id = 1) 中,@record = Num
,为什么 n = 1 而不是 2?
在 row_3 中,@record = Num
,为什么 n = 3 而不是 2?
只有一个@record全局变量吗?或者每个 num 都有自己的 @record 变量?
有人可以帮我理解@sql变量逻辑吗?谢谢!
最佳答案
在处理任何行之前,MySQL 首先评估 JOIN,即 @count=1
和 @record=1
。第一行的 num
与 @record
相同,因此 n
的值为 1 (@count+1
) 。
第二行和第三行遵循相同的逻辑结果值 2 和 3。
第四行重置@count
并将新的num
放入@record
等等...
关于mysql - SQL变量赋值和比较逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59095608/