Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-迄今为止的总和数据字段_Sql_Oracle - Fatal编程技术网

SQL-迄今为止的总和数据字段

SQL-迄今为止的总和数据字段,sql,oracle,Sql,Oracle,我不知道如何对数据字段求和到目前为止 我的查询当前输出类似于以下内容: Date Count 12/1 3 12/2 5 12/3 2 我想添加一个列,对迄今为止的计数列进行汇总: Date Count To-Date 12/1 3 3 12/2 5 8 12/3 2 10 有什么想法吗 ***更新-我尝试为其执行此操作的表有点复杂: ID Date Count for Date X

我不知道如何对数据字段求和到目前为止

我的查询当前输出类似于以下内容:

Date    Count
12/1    3
12/2    5
12/3    2
我想添加一个列,对迄今为止的计数列进行汇总:

Date    Count    To-Date
12/1    3        3
12/2    5        8
12/3    2        10
有什么想法吗

***更新-我尝试为其执行此操作的表有点复杂:

ID  Date    Count for Date
X   10/11/11    10  
X   10/11/11    10  
X   14/11/11    2   
X   14/11/11    2   
X   22/11/11    21  
X   23/11/11    50
X   23/11/11    50  
使用此代码:

Sum(Count for Date) over (partition by x, date order by date rows between unbounded preceding and current row)
我最终得到:

10
20
2
4
21
50
100

[更新以反映变化,我在猜测结果应该是什么,我假设您想计算当天的总数?如果不是,您是否也可以显示您的预期结果?]

分析函数可以做到这一点:

CREATE TABLE test(id int, count int);

INSERT INTO test VALUES(10, 10);
INSERT INTO test VALUES(10, 10);
INSERT INTO test VALUES(14, 2);
INSERT INTO test VALUES(14, 2);
INSERT INTO test VALUES(22, 21);
INSERT INTO test VALUES(23, 50);
INSERT INTO test VALUES(23, 50);

SELECT id, SUM(count) AS sum_for_day
  FROM test
  GROUP BY id
  ORDER BY id;

 id | sum_for_day
----+-------------
 10 |          20
 14 |           4
 22 |          21
 23 |         100
(4 rows)

SELECT id, sum_for_day
      ,sum(sum_for_day) over (order by id rows between unbounded preceding and current row) AS to_date
  FROM ( SELECT id, SUM(count) AS sum_for_day
       FROM test
           GROUP BY id
           ORDER BY id) x;

 id | sum_for_day | to_date
----+-------------+---------
 10 |          20 |      20
 14 |           4 |      24
 22 |          21 |      45
 23 |         100 |     145
(4 rows)

[更新以反映变化,我在猜测结果应该是什么,我假设您想计算当天的总数?如果不是,您是否也可以显示您的预期结果?]

分析函数可以做到这一点:

CREATE TABLE test(id int, count int);

INSERT INTO test VALUES(10, 10);
INSERT INTO test VALUES(10, 10);
INSERT INTO test VALUES(14, 2);
INSERT INTO test VALUES(14, 2);
INSERT INTO test VALUES(22, 21);
INSERT INTO test VALUES(23, 50);
INSERT INTO test VALUES(23, 50);

SELECT id, SUM(count) AS sum_for_day
  FROM test
  GROUP BY id
  ORDER BY id;

 id | sum_for_day
----+-------------
 10 |          20
 14 |           4
 22 |          21
 23 |         100
(4 rows)

SELECT id, sum_for_day
      ,sum(sum_for_day) over (order by id rows between unbounded preceding and current row) AS to_date
  FROM ( SELECT id, SUM(count) AS sum_for_day
       FROM test
           GROUP BY id
           ORDER BY id) x;

 id | sum_for_day | to_date
----+-------------+---------
 10 |          20 |      20
 14 |           4 |      24
 22 |          21 |      45
 23 |         100 |     145
(4 rows)

假设您希望每个不同的
ID
的总数是不同的,那么您希望

SELECT id, 
       date_column, 
       count_for_date, 
       sum(count_for_date) over (partition by id order by date_column) running_total
  FROM some_table_name
如果要忽略
ID
并按
date\u列对所有行求和
,只需删除分析函数中的
分区

SELECT id, 
       date_column, 
       count_for_date, 
       sum(count_for_date) over (order by date_column) running_total
  FROM some_table_name

假设您希望每个不同的
ID
的总数是不同的,那么您希望

SELECT id, 
       date_column, 
       count_for_date, 
       sum(count_for_date) over (partition by id order by date_column) running_total
  FROM some_table_name
如果要忽略
ID
并按
date\u列对所有行求和
,只需删除分析函数中的
分区

SELECT id, 
       date_column, 
       count_for_date, 
       sum(count_for_date) over (order by date_column) running_total
  FROM some_table_name

如果格伦的回答没有帮助。告诉我们您正在使用的sql的版本。是否希望在每个月初重新启动?例如,如果11年12月31日是44,那么应该将2012年1月1日添加到它,还是重新开始计数?我使用的是Oracle SQL Developer。我不希望它再重新开始,如果格伦的回答没有帮助,计数应该继续,因为记录1。告诉我们您正在使用的sql的版本。是否希望在每个月初重新启动?例如,如果11年12月31日是44,那么应该将2012年1月1日添加到它,还是重新开始计数?我使用的是Oracle SQL Developer。我不希望它重新启动,计数应该继续进行,因为记录1 Hanks Glenn,您的代码适用于我提供的简单表。我更新了我的问题,展示了一些更能代表我实际拥有的东西,我试图总结的专栏在同一天重复了几次。我试着修改您的代码如下:“Sum(countfordate)over(partitionbyx,dateorderbydate行在无界的前一行和当前行之间)”谢谢Glenn,您的代码适用于我提供的简单表。我更新了我的问题,展示了一些更能代表我实际拥有的东西,我试图总结的专栏在同一天重复了几次。我试着如下修改您的代码:'Sum(countfordate)over(按x划分,在无界的前一行和当前行之间按日期排序)'