Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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
在PostgreSQL中计算日积月累_Sql_Postgresql_Window Functions - Fatal编程技术网

在PostgreSQL中计算日积月累

在PostgreSQL中计算日积月累,sql,postgresql,window-functions,Sql,Postgresql,Window Functions,我的数据是这样的 id,submission_state,outcome_state,company_id,office_id,date_created,location_city,location_state,location_country,work_type,is_foreign op_01CB7TX0DS8AQYKWNZ0AQ80CAY,WILL_SUBMIT,UNKNOWN,co_01CB7TWTZJ73X1V7Y018FPM7PM,of_01CB7TWTZJ73X1V7Y018FPM

我的数据是这样的

id,submission_state,outcome_state,company_id,office_id,date_created,location_city,location_state,location_country,work_type,is_foreign
op_01CB7TX0DS8AQYKWNZ0AQ80CAY,WILL_SUBMIT,UNKNOWN,co_01CB7TWTZJ73X1V7Y018FPM7PM,of_01CB7TWTZJ73X1V7Y018FPM7PN,2017-07-21T05:56:47.122Z,,,,,1
op_01CB7TX0DS8AQYKWNZ0AQ80CAZ,UNDECIDED,UNKNOWN,co_01CB7TX0DS8AQYKWNZ0AQ80CB0,of_01CB7TX0DS8AQYKWNZ0AQ80CB1,2017-08-17T02:42:45.304Z,Houston,TX,US,,1
op_01CB7TX0DS8AQYKWNZ0AQ80CB2,SUBMITTED,UNKNOWN,co_01CB7TWTYSQQR8B1Q7X6BASZE8,of_01CB7TWTYSQQR8B1Q7X6BASZE9,2017-08-18T21:02:31.897Z,Sandy Springs,GA,US,,1
| day_created        | location_state | opp_count | cumulative_opps_received |
| ------------------- | -------------- | --------- | ------------------------ |
| 2013-12-13 00:00:00 | CA             | 1         | 1                        |
| 2014-05-16 00:00:00 | CA             | 1         | 2                        |
| 2014-08-02 00:00:00 | CA             | 2         | 4                        |
我想计算各州的每日累积机会

结果应该是这样的

id,submission_state,outcome_state,company_id,office_id,date_created,location_city,location_state,location_country,work_type,is_foreign
op_01CB7TX0DS8AQYKWNZ0AQ80CAY,WILL_SUBMIT,UNKNOWN,co_01CB7TWTZJ73X1V7Y018FPM7PM,of_01CB7TWTZJ73X1V7Y018FPM7PN,2017-07-21T05:56:47.122Z,,,,,1
op_01CB7TX0DS8AQYKWNZ0AQ80CAZ,UNDECIDED,UNKNOWN,co_01CB7TX0DS8AQYKWNZ0AQ80CB0,of_01CB7TX0DS8AQYKWNZ0AQ80CB1,2017-08-17T02:42:45.304Z,Houston,TX,US,,1
op_01CB7TX0DS8AQYKWNZ0AQ80CB2,SUBMITTED,UNKNOWN,co_01CB7TWTYSQQR8B1Q7X6BASZE8,of_01CB7TWTYSQQR8B1Q7X6BASZE9,2017-08-18T21:02:31.897Z,Sandy Springs,GA,US,,1
| day_created        | location_state | opp_count | cumulative_opps_received |
| ------------------- | -------------- | --------- | ------------------------ |
| 2013-12-13 00:00:00 | CA             | 1         | 1                        |
| 2014-05-16 00:00:00 | CA             | 1         | 2                        |
| 2014-08-02 00:00:00 | CA             | 2         | 4                        |

您可以同时使用聚合和窗口函数:

select date_trunc('day', date_created) as day_created,
       location_state,
       count(*) opp_count,
       sum(count(*)) over (partition by location_state order by min(date_created)) as cumulative_opps_received
from t
group by day_created
order by location_state, day_created;
如果需要百分比,您可以除以:

select date_trunc('day', date_created) as day_created,
       location_state,
       count(*) opp_count,
       sum(count(*)) over (partition by location_state order by min(date_created))  as cumulative_opps_received,
       (sum(count(*)) over (partition by location_state order by min(date_created)) * 1.0 /
        sum(count(*)) over (partition by location_state)
       ) as cumulative_ratio
from t
group by day_created
order by location_state, day_created;

我们可以从总机会中计算累计百分比吗?