在SQL中总计一列

时间:2012-05-07 18:13:17

标签: mysql sql phpmyadmin

我正在尝试在phpmyadmin中运行一个SQL查询,该查询将累计多行并将该总数插入到单元格中。

文件按日期排序,然后按其他一些细节排序。

我很难找到它的语法。

基本上我有一个名为'Points'的列,另一个名为'Total_Points'

它需要看起来像这样:

+--------+--------------+
| Points | Total Points |
+--------+--------------+
|   10   |      10      |
|   10   |      20      |
|   10   |      30      |
|   10   |      40      |
+--------+--------------+

依旧等等。
似乎必须有一些东西可以做到这一点,我只是错过了它

2 个答案:

答案 0 :(得分:0)

对于运行总和,您可以使用“窗口函数”,如下所示:

create table tbl(ord int, points int);
insert into tbl values(1, 10),(2, 10), (3, 10), (4, 10);

select
    *,
    sum(points) over w total_points
from tbl
window w as (order by ord);

 ord | points | total_points 
-----+--------+--------------
   1 |     10 |           10
   2 |     10 |           20
   3 |     10 |           30
   4 |     10 |           40

我将您的ORDER BY条件“汇总”为列ord。你当然可以替换它。

除此之外:您没有指定具体的数据库供应商。我的例子在PostgreSQL上运行。其他SQL方言可能略有不同。

答案 1 :(得分:0)

关于SQL中的累积总和有很多讨论。

您可能需要查看this article。如果速度不是一个大问题,你也可以简单地使用:

select t1.id, t1.SomeNumt, SUM(t2.SomeNumt) as sum 
from @t t1 
inner join @t t2 
  on t1.id >= t2.id 
  group by t1.id, t1.SomeNumt 
  order by t1.id 

关键问题是SQL实际上并不以任何顺序存储行。 “运行总计”的ieda假定行有一个订单,默认情况下,这不是真的。在SQL Server 2012中,有一个功能,但在人们使用它之前,这是我们能做的最好的。