繁体   English   中英

MYSQL:将ORDER BY添加到查询中时,累计总和的where子句不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM