每次操作后的MySQL SUM和MIN

MySQL SUM and MIN after each operation(每次操作后的MySQL SUM和MIN)
本文介绍了每次操作后的MySQL SUM和MIN的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请考虑以下表结构:

|----------|-----------|----|
| Quantity | BaseValue | Id |
|----------|-----------|----|
|  -0.3    | 1         | 1  |
|  -0.8    | 1         | 2  |
|   0.5    | 1         | 3  |
|  -0.2    | 1         | 4  |
|----------|-----------|----|

假设这是一个名为Transactions的表。是否可以根据以下规则集对此表进行SELECT查询,从而将Quantity列中的值相加:

  • 将对Id小于x
  • 的每一行求和
  • 首先将BaseValue加到一个类型的变量中,我们称它为y
  • 然后每行将Quantity加到y,如果结果小于0,y将为0

我希望看到的结果如下所示:

如果x为1,y应为1
如果x为2,y应为0.7
如果x为3,y应为0
如果x为4,y应为0.5

在SELECT操作之后,我希望看到下表,例如:

|----------|-----------|----|-----|
| Quantity | BaseValue | Id | Y   |
|----------|-----------|----|-----|
|  -0.3    | 1         | 1  | 1   |
|  -0.8    | 1         | 2  | 0.7 |
|   0.5    | 1         | 3  | 0   |
|  -0.2    | 1         | 4  | 0.5 |
|----------|-----------|----|-----|

我使用的MySQL版本是:10.2.16-MariaDB

示例:

假设x为4,程序的工作方式如下:

  1. Y=BaseValue+0
  2. Id=1得到直线,将YQuantity从该行求和,结果是0.7,因为这个大于0,Y现在是0.7
  3. Id=2求行,YQuantity相加,结果是-0.1,因为这个小于0,Y现在是0
  4. Id=3取行,将YQuantity行相加,结果为0.5,大于0,因此保持
  5. 不再接受行,因为4 < x不正确,因此Y为0.5

推荐答案

这里有一个基于递归cte的解决方案:

WITH RECURSIVE rcte AS (
    SELECT base.*, (SELECT 1.0 /* AS BaseValue FROM other_table */) AS y
    FROM t AS base
    WHERE Id = 1
    UNION ALL
    SELECT curr.*, GREATEST(prev.Quantity + prev.y, 0)
    FROM t    AS curr
    JOIN rcte AS prev ON curr.Id = prev.Id + 1
)
SELECT *
FROM rcte

您不太清楚Quantity和BaseValue列是指当前迭代还是指上一次迭代,但RCTE非常简单易懂且易于修改。

Demo on db<>fiddle

这篇关于每次操作后的MySQL SUM和MIN的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)