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

标签 mysql sql

我正在尝试从 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不尊重WHERE子句( @total 超过 100000 直到所有记录完成)。

如果我做出一些改变,就会发生奇怪的事情。喜欢:

  • 如果我删除 AND id < 1000线,它的工作原理与预期一致(但我需要这条线)。
  • 如果我删除 ORDER BY id DESC线,也可以(但我也需要这条线)。
  • 如果我删除 AND storage_id=4 ,它有效(但我也需要这条线)。
  • 如果我改变AND storage_id=4AND 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;

关于MYSQL:将 ORDER BY 添加到查询中时,累积总和的 Where 子句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50256466/

相关文章:

MySQL 如何从表中进行 SELECT SUM 并从其他 SEARCH 中进行乘法?

java - 我的登录身份验证 Servlet 遇到问题

mysql - 只需要对查询中的特定行进行分组

sql - SELECT FOR UPDATE NOWAIT 与 Oracle SQL 的更新查询交互

sqlite 查询用合法的回车替换隐藏/不可见的回车

MySQL 分区选择未正确优化

MySQL 查询单个表以查找多行

php - 在一个查询中显示月 SUM 和年 SUM

java - 如何使用 SQL 或 JPA 确定记录的层次结构

sql - SQL Server 中的 DECODE() 函数