累积和的where子句如何工作?

时间:2017-12-21 08:48:32

标签: mysql sql

所以,我有一个表调用顺序,由两个由值组成的结果组成。

执行此查询时:

SELECT @running_total := @running_total + orders.myVal AS cumulative_sum
From orders JOIN
     (SELECT @running_total := 0) r

它返回此结果:

_____________________
|id | cumulative_sum |
|___|________________|
| 1 |             1  |
|___|________________|
| 2 |             3  |
|___|________________|  

但是当我添加where子句WHERE @running_total <= 0.5

SELECT @running_total := @running_total + orders.myVal AS cumulative_sum
From orders JOIN (SELECT @running_total := 0) 
WHERE @running_total <= 0.5

为什么会返回相同的结果?

据我所知,它不应该返回任何结果,因为两个结果都不包含任何小于0.5

的内容

由于

3 个答案:

答案 0 :(得分:1)

尝试这个:我认为,当您使用@running_total <= 0.5检查条件时,此变量中没有分配任何值,因此它总是如此是真实的,回报价值。请查看@running_total <= 0.2并返回true,然后按>查看,您也会明白自己在做什么

SELECT * FROM (@running_total := @running_total + orders.myVal AS cumulative_sum 
From orders 
JOIN (SELECT @running_total := 0) r) t WHERE @running_total <= 0.5

答案 1 :(得分:1)

何时&#34;哪里&#34;在上面添加的子句不满足单个记录的条件,然后它总是返回第一个记录,而不是相同的结果集。

请参阅此示例:http://sqlfiddle.com/#!9/bc0a4/3

似乎在分配给&#34; @ running_total&#34;变量应该应用Where子句。

答案 2 :(得分:0)

关于变量的MySQL documentation解释了:

  

SELECT语句中,每个select表达式仅在以下时进行计算   发送给客户。

换句话说,在评估WHERE 之前评估SELECT 。您已设置变量0的值,因此所有行都会通过该条件。

正如其他地方所解释的,子查询解决了这个问题。

我还应该注意,在没有ORDER BY的情况下运行查询意味着结果是以任意的,不确定的顺序。