【问题标题】:Cumulative Totals By Date in Postgres Using Window Function使用窗口函数在 Postgres 中按日期累积总计
【发布时间】:2015-05-03 05:46:05
【问题描述】:

我希望在 SQL 中按日期生成一个简单的累积总计,但遇到了一个看似简单的问题。我已经开发了一种解决方法,但想象一下有一种方法可以在没有额外步骤的情况下做我想做的事。基本上我正在寻找的是:

| Date | Count | | 2015-01-01 | 1 | | 2015-01-02 | 5 | | 2015-01-03 | 8 | | 2015-01-04 | 9 | | 2015-01-05 | 9 |

我们可以假设表格只有两行——iddate——而我想看到的正是上面的内容;但是,当我运行以下代码时,我得到重复的行:

SELECT date, count(*) over (order by date) AS cumulative_count FROM my_table;

返回:

| Date | Count | | 2015-01-01 | 1 | | 2015-01-02 | 5 | | 2015-01-02 | 5 | | 2015-01-02 | 5 | | 2015-01-02 | 5 | | 2015-01-02 | 5 | | 2015-01-03 | 8 | | 2015-01-03 | 8 | ...etc.

我的解决方法是使用SELECT DISTINCT date, count(*) over (order by date) AS cumulative_count FROM my_table;,但我想我只是想念一种更好的方法。

提前致谢!

【问题讨论】:

  • 我不认为在这里成为DISTINCT 有什么问题。另见:stackoverflow.com/questions/5698452/…
  • 在这种情况下为什么要使用窗口函数?
  • 有没有更简单的方法来获得累积/运行总计而不使用窗口函数?

标签: sql postgresql window-functions


【解决方案1】:

如果您不想使用 distinct,您可以使用 GROUP BY DATE, COUNT

【讨论】:

  • group by 不会计算累计总数,而是计算总数 by date 除非您在子查询中执行此操作,然后在外部查询中执行累计总数。但这比仅仅使用distinct更麻烦
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
  • 2014-04-12
  • 1970-01-01
相关资源
最近更新 更多