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

如何高效计算 PostgreSQL 每分钟运行行数?

Patricia Arquette
发布: 2025-01-19 00:46:10
原创
743 人浏览过

How to Efficiently Calculate Running Row Counts per Minute in PostgreSQL?

PostgreSQL中每分钟行计数的有效计算方法

获取行计数

SELECT COUNT(id) AS count,
       EXTRACT(hour FROM "when") AS hour,
       EXTRACT(minute FROM "when") AS minute
FROM mytable
GROUP BY hour, minute;
登录后复制

此查询计算每分钟的行数,但不提供运行总数。

获取运行计数

方法一:仅返回有活动记录的分钟

SELECT DISTINCT
       date_trunc('minute', "when") AS minute,
       count(*) OVER (ORDER BY date_trunc('minute', "when")) AS running_ct
FROM   mytable
ORDER  BY 1;
登录后复制

此查询使用date_trunc()函数,返回每个活动分钟的行计数。它使用带ORDER BY子句的窗口函数计算运行总数。

包含无活动记录的分钟

方法二:使用带连接的子查询

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;
登录后复制

此方法在一个子查询中聚合每分钟的行计数。然后,主查询连接它以累加计数,并包含没有活动的分钟。

方法三:使用CTE(最快)

WITH cte AS (
   SELECT date_trunc('minute', "when") AS minute, count(*) AS minute_ct
   FROM   tbl
   GROUP  BY 1
   ) 
SELECT m.minute,
       COALESCE(sum(cte.minute_ct) OVER (ORDER BY m.minute), 0) AS running_ct
FROM  (
   SELECT generate_series(min(minute), max(minute), interval '1 min')
   FROM   cte
   ) m(minute)
LEFT   JOIN cte USING (minute)
ORDER  BY 1;
登录后复制

此方法结合了CTE、子查询和左连接。对于具有“when”索引的大型数据集,这是一种有效的方法。

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

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板