如何在 MySQL 中对行进行求和

Posted

技术标签:

【中文标题】如何在 MySQL 中对行进行求和【英文标题】:How to perform SUM of rows in MySQL 【发布时间】:2012-11-14 17:51:12 【问题描述】:

我有一张名为temp_reading 的表。它有以下列(消费是一个索引键):

id consumption total
1  100
1  200
1  300
1  400
2  50
2  100
3  200
4  250

现在我想将总计显示为

id   consumption  total
1    100          100
1    200          300
1    300          600
1    300          900
2    50           50
2    100          150
3    200          200
4    250          250

可以像上面那样显示吗?

我尝试了以下查询:

SELECT id,consumption,sum(consumption) as total 
FROM temp_reading 
GROUP BY consumption;

请帮我解决这个问题。

【问题讨论】:

你不能做这个应用程序端吗?这在纯 SQL 中很难做到。 是的,我可以在应用程序端执行此操作,请您解释一下如何在应用程序端执行此操作 您的应用程序使用什么编程语言? 我的应用包括java,jsp和mysql @SaiSai 检查我的答案。它会做数据库方面,更有效。 【参考方案1】:

我建议您在 temp_reading 表中添加 Primary Key。 (阅读有关Primary Keys 的更多信息)此键将是每行唯一的。然后你可以试试这个查询:

SELECT TR.id
  , TR.consumption
  , TR.consumption + IFNULL(SUM(TR2.consumption), 0) AS Total
  FROM temp_reading TR
  LEFT JOIN temp_reading TR2 ON TR.id = TR2.id AND TR.pk > TR2.pk
  GROUP BY TR.pk;

我已经在SQL Fiddle尝试过了。

【讨论】:

【参考方案2】:
     select id,sum(consumption) as total 
     from temp_reading 
     group by id;

建议你不要同ID(1,1,1.2,2...)

【讨论】:

【参考方案3】:

试试这个:

SELECT id, consumption, IF(@s=@s:=id, @s2:=@s2+consumption, @s2:=consumption) AS total
FROM temp_reading, (SELECT @s:=0, @s2:=0);

【讨论】:

以上是关于如何在 MySQL 中对行进行求和的主要内容,如果未能解决你的问题,请参考以下文章

如何在 numba CUDA 中对行进行切片?

如何在panda中对行和多列进行迭代?

如何在 PySpark 中的大型 Spark 数据框中对行的每个子集进行映射操作

如何在 MySQL 中对两个结果集中的列求和

如何根据 SQL 中的分区对行求和?

Handsontable:如何对行求和?