[英]MYSQL: Where clause on cumulative sum not working when ORDER BY is added to query
我正在尝试从storage_movements
表中获取所有记录,直到weight
列总和达到特定值为止。 这是我要执行的查询:
SELECT id, storage_id, weight, (@total := weight + @total) as c_sum
FROM `storage_movements`
JOIN (SELECT @total := 0) r
WHERE @total < 100000
AND weight > 0
AND storage_id=4
AND id < 1000
ORDER BY id DESC
它不起作用。 它将继续添加@total
而不@total
WHERE
子句( @total
超过100000
直到完成所有记录)。
如果我进行一些更改,将会发生奇怪的事情。 喜欢:
AND id < 1000
行,则它的工作与预期的一样(但我需要此行)。 ORDER BY id DESC
行,则也可以(但我也需要此行)。 AND storage_id=4
,它可以工作(但我也需要此行)。 AND storage_id=4
更改为AND storage_id < 4
,那么它将起作用(为什么呢,上帝?)。 有人可以告诉我为什么会这样,还是告诉我如何做我想做的事情?
在较新的MySQL版本中,您需要首先进行排序:
SELECT id, storage_id, weight, (@total := weight + @total) as c_sum
FROM (SELECT sm.*
FROM storage_movements sm
WHERE weight > 0 AND storage_id = 4 AND id < 1000
ORDER BY id
) sm CROSS JOIN
(SELECT @total := 0) r
WHERE @total < 100000;
我对在WHERE
使用@total
并不感到兴奋。 我想我会去:
SELECT id, storage_id, weight, (@total := weight + @total) as c_sum
FROM (SELECT sm.*
FROM storage_movements sm
WHERE weight > 0 AND storage_id = 4 AND id < 1000
ORDER BY id
) sm CROSS JOIN
(SELECT @total := 0) r
HAVING c_sum < 100000;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.