【问题标题】:Mysql query to find a value in a range of cumulative sumMysql查询在累积和的范围内查找值
【发布时间】:2021-11-13 06:28:27
【问题描述】:

我有一张如下所示的表格:

id count
1 100
2 50
3 10
4 10

我想运行 select * 查询,通过使用一个名为 nucleus_sum 的新列,这样这个新列不会创建到表中,而是每次都被查询(计算)并用于选择介于 limit 和 offset 之间的行, + 后面还有 1 行。

假设我提供 offset = 130 和 limit= 25(即范围 130 到 155),那么它应该返回第 2 行第 3 行和第 4 行(即最后一行 + 1)

id count cumulative_sum
1 100 100
2 50 150
3 10 160
4 10 170

上述条件如何编写Mysql查询?

我已经尝试了很长一段时间,请帮助我了解如何做到这一点?

累积总和列只是=最后一行累积总和+当前行计数的总和

【问题讨论】:

  • 您最近所做的编辑令人困惑,但更重要的是,它完全使以下几个小时前给出的两个答案无效。请避免在其他用户已经回答后对您的问题进行戏剧性的修改。
  • @TimBiegeleisen ,输出下的表格是概括累计和计算以及我以文本形式写的实际结果(“假设我提供偏移量= 130和限制= 25(即范围130到155)然后它应该返回表格上方的第 2 行第 3 行和第 4 行(即最后一行+1)“)。可能这造成了混乱,为了消除混乱,进行了编辑。

标签: mysql logic


【解决方案1】:

在 MySQL 8+ 上,我们可以简单地使用 SUM() 作为解析函数:

SELECT id, count, SUM(count) OVER (ORDER BY id) AS cumulative_sum
FROM yourTable
ORDER BY id;

在早期版本的 MySQL 中,我们可以使用相关子查询来查找滚动和:

SELECT id, count,
       (SELECT SUM(t2.count) FROM yourTable t2
        WHERE t2.id <= t1.id) AS cumulative_sum
FROM yourTable t1
ORDER BY id;

【讨论】:

  • 这个解决方案没有给出正确的输出,请检查我在问题中添加的示例。我希望获得行 = 选择介于限制和偏移之间的行,然后再增加 1 行。限制和偏移量将由用户给出。
【解决方案2】:

使用Window function 来实现这一点(与MySQL 8.0 及更高版本一起使用):

SELECT id, count, sum(count) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as cummulative_sum
FROM your_table
ORDER BY id

【讨论】:

  • 这个解决方案没有给出正确的输出,请检查我在问题中添加的示例。我希望获得行 = 选择介于限制和偏移之间的行,然后再增加 1 行。限制和偏移量将由用户给出。
猜你喜欢
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
相关资源
最近更新 更多