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划分,在无界的前一行和当前行之间按日期排序)'