当前位置: 首页 > 面试题库 >

用mysql计算余额

蓬弘
2023-03-14
问题内容

我有一个包含以下数据的表:

ID      In       Out 
1      100.00    0.00   
2       10.00    0.00   
3        0.00   70.00    
4        5.00    0.00    
5        0.00   60.00   
6       20.00    0.00

现在,我需要一个查询,该查询给出以下结果:

ID      In       Out    Balance
1      100.00    0.00   100.00
2       10.00    0.00   110.00
3        0.00   70.00    40.00
4        5.00    0.00    45.00
5        0.00   60.00   -15.00
6       20.00    0.00     5.00

是否可以通过一个查询而不使用触发器或存储过程来做到这一点?


问题答案:

简短的回答,是的

更长的答案是,您可以使用变量在向下迭代行时对其进行计数,即

SELECT 
    `table`.`ID`,
    `table`.`In`,
    `table`.`Out`,
    @Balance := @Balance + `table`.`In` - `table`.`Out` AS `Balance`
FROM `table`, (SELECT @Balance := 0) AS variableInit
ORDER BY `table`.`ID` ASC

, (SELECT @Balance := 0) AS variableInit确保在开始之前@Balance被初始化为0。然后,对于每一行,将@Balance设置为@Balance + In - Out,然后输出计算出的值。

同样值得确定的是ORDER是一致的,否则Balance会根据返回行的顺序而有所不同。例如,如果您想将其重新排序,则可以将其用作子查询,因为外部查询将处理计算出的值,从而确保余额保持正确,即

SELECT
    `balanceCalculation`.`ID`,
    `balanceCalculation`.`In`,
    `balanceCalculation`.`Out`,
    `balanceCalculation`.`Balance`
FROM (
    SELECT 
        `table`.`ID`,
        `table`.`In`,
        `table`.`Out`,
        @Balance := @Balance + `table`.`In` - `table`.`Out` AS `Balance`
    FROM `table`, (SELECT @Balance := 0) AS variableInit
    ORDER BY `table`.`ID` ASC
) AS `balanceCalculation`
ORDER BY `balanceCalculation`.`ID` DESC


 类似资料:
  • 要求定义一个int型数组a,包含100个元素,保存100个随机的4位数。再定义一个int型数组b,包含10个元素。统计a数组中的元素对10求余等于0的个数,保存到b[0]中;对10求余等于1的个数,保存到b[1]中,……依此类推。 解决(python) #!/usr/bin/env python #coding:utf-8 import random if __name__=="__main__"

  • 我已经实现了下面的代码来计算剩余的天数。我已经使用SimpleDateFormat将字符串转换为日期。如果输入10/02/1993(今天的日期)作为日期,则输出显示还剩0天。但如果我选择11/02/1993,它显示的输出与0天相同。但如果我改变月份,即1993年2月22日7月2日,它显示的是剩下160天,而不是原来的162天,这是原来的结果。我在这里做错了什么?非常感谢任何帮助。 更新:我已经更新

  • 问题内容: 使用下面的MySQL表包含具有相关金额的借方或贷方“操作”,如何选择具有非零“余额”的所有CLIENT_ID?我尝试将表格与自身连接起来以计算所有借方和贷方总计,但某些方法无法正常工作。 我的MySQL查询不起作用: 我期望的结果是这样的: 我不知道还有什么可以尝试的。任何帮助将是巨大的。 问题答案:

  • 问题内容: 我刚开始使用SQL并遇到了问题。 在我的数据库中,我目前有两个表,电影院和剧院。我正在尝试在Cinemas表中创建一列“#Theatres#”,该表计算着Cinemas表中具有与Cinemas表中的Cinema相同的CinemaID(外键)的Theaters表中的剧院数量。我将其用作SQL查询: 但是想知道是否有可能在Cinemas表中创建一列,该列会自动执行上述查询并将值插入到每一行

  • 问题内容: 假设您在数据库中按以下方式构造了一个表: 为了清楚起见,应输出: 请注意,由于向量存储在数据库中,因此我们仅需要存储非零条目。在此示例中,我们只有两个向量$ v_ {99} =(4,3,4,0)$和$ v_ {1234} =(0,5,2,3)$都在$ \ mathbb {R}中^ 4 $。 这些向量的余弦相似度应为$ \ displaystyle \ frac {23} {\ sqrt

  • 问题内容: 在MySQL中是否可以对2行的计算进行排序?例如,我有2行,并且我正在尝试执行以下操作: 这不会引发错误,但是也不会根据该计算结果进行排序。有没有办法做到这一点,还是我必须将lp / ap存储在数据库中? 问题答案: 是的,这是可行的,而且确实可行。查看以下测试: 将返回相同的结果。