我有一个查询,得到quantity1,value1,total1我想得到的是下面的结果
quantity 1, value 1, total 1, sum quantity, sum total / sum quantity as value summ, sum total
80 - 3.8 - 304 , 80 - 3.8 - 304
40 - 3.75 - 150, 120 - 3.783 - 454
40 - 3.8 - 152, 160 - 37875 - 606
也就是说,能够获得总和的总和,(总和1 +先前的总和)然后与数量1相除
我试过用
SELECT
@prev:= @prev + total 1 as column1, @prev / quantity 1 as value
from table;
但我没有得到预期的结果
使用MySQL 5.6和Windows S.O
3条答案
按热度按时间6pp0gazn1#
您可以使用用户定义的变量来实现所需的结果。下面是一个计算累计和和除法的示例查询:
确保将table_name替换为表的实际名称。
此查询将
@prev
变量初始化为0
。然后,它选择列quantity、value和total,并使用用户定义的变量@prev
执行计算,以计算累计总和和除法。结果显示在列中:quantity、value、total、cumulative_total、value_summ和sum_total。请注意,用户定义的变量是特定于会话的,因此@prev变量将在同一会话中保留其值。如果在同一会话中多次运行此查询,请确保通过执行SET @prev:= 0;在运行查询之前再次执行。
vof42yt12#
如果不使用
order by
子句,@prev
值的结果将是不确定的。你需要有一个列(id,timestamp...)来唯一地标识你的行的顺序,这样SQL就可以正确地确定前一个值是什么。根据您的示例数据,考虑以下示例:
demo
wswtfjt73#
如果您使用MySQL 5.6,并希望在一个查询中得到答案
这个应该能用