首页 >数据库 >mysql教程 >如何计算 PostgreSQL 中每分钟的运行总行数?

如何计算 PostgreSQL 中每分钟的运行总行数?

Susan Sarandon
Susan Sarandon原创
2025-01-19 00:52:09625浏览

How to Calculate a Running Total of Rows per Minute in PostgreSQL?

PostgreSQL:按分钟查询行数的运行总计

问题概述

您需要检索每分钟直到该特定时间的行总数。

计算总数的最佳方法

<code class="language-sql">SELECT DISTINCT date_trunc('minute', "when") AS minute,
       count(*) OVER (ORDER BY date_trunc('minute', "when")) AS running_ct
FROM   mytable
ORDER  BY 1;</code>

此查询使用 date_trunc() 函数仅提取“when”字段的分钟部分。作为窗口函数在此截断的分钟分量上聚合的 count() 函数提供运行总计。

最快的方法

<code class="language-sql">SELECT minute, sum(minute_ct) OVER (ORDER BY minute) AS running_ct
FROM  (
   SELECT date_trunc('minute', "when") AS minute,
          count(*) AS minute_ct
   FROM   tbl
   GROUP  BY 1
   ) sub
ORDER  BY 1;</code>

此查询聚合到子查询中以计算每分钟的行数。然后,它使用窗口函数执行运行总和。

处理无活动的分钟

为了确保每个分钟都被计算在内,即使那些没有活动:

<code class="language-sql">SELECT m.minute,
       COALESCE(sum(c.minute_ct) OVER (ORDER BY m.minute), 0) AS running_ct
FROM  (
   SELECT generate_series(date_trunc('minute', min("when")),
                          max("when"),
                          interval '1 min')
   FROM   tbl
   ) m(minute)
LEFT   JOIN (
   SELECT date_trunc('minute', "when") AS minute,
          count(*) AS minute_ct
   FROM   tbl
   GROUP  BY 1
   ) c USING (minute)
ORDER  BY 1;</code>

此查询使用 generate_series() 为范围内的每一分钟创建一个行,并使用 LEFT JOIN 来计算和汇总基表中的行。

以上是如何计算 PostgreSQL 中每分钟的运行总行数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn