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

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

Mary-Kate Olsen
发布: 2025-01-19 00:57:10
原创
339 人浏览过

How to Calculate a Running Row Count by Minute in PostgreSQL?

PostgreSQL:按分钟计算查询结果的行数

本文介绍如何在PostgreSQL中使用窗口函数按分钟计算查询结果的运行行数。

一、每分钟的行数

以下查询返回每分钟的行数:

<code class="language-sql">SELECT
  COUNT(id) AS count,
  EXTRACT(hour FROM "when") AS hour,
  EXTRACT(minute FROM "when") AS minute
FROM
  mytable
GROUP BY
  hour,
  minute;</code>
登录后复制

二、每分钟的累计行数

要计算每分钟的累计行数,可以使用以下查询:

<code class="language-sql">SELECT DISTINCT
  date_trunc('minute', "when") AS minute,
  COUNT(*) OVER (ORDER BY date_trunc('minute', "when")) AS running_count
FROM
  mytable
ORDER BY
  minute;</code>
登录后复制

说明:

  • date_trunc('minute', "when") 将时间戳列 "when" 截断到最近的分钟。
  • COUNT(*) OVER (ORDER BY date_trunc('minute', "when")) 计算每分钟的运行行数。ORDER BY 子句指定聚合的行的排序。
  • DISTINCT 用于确保只返回唯一的分钟。这是因为 COUNT 聚合函数将为同一分钟返回多行。

三、包含无活动的分钟

如果要包含结果中无活动的分钟,可以使用以下查询:

<code class="language-sql">SELECT
  m.minute,
  COALESCE(SUM(c.minute_count) OVER (ORDER BY m.minute), 0) AS running_count
FROM
  (
    SELECT
      generate_series(MIN(minute), MAX(minute), INTERVAL '1 minute') AS minute
    FROM
      (
        SELECT
          date_trunc('minute', "when") AS minute,
          COUNT(*) AS minute_count
        FROM
          mytable
        GROUP BY
          minute
      ) AS sub
  ) AS m
LEFT JOIN
  (
    SELECT
      date_trunc('minute', "when") AS minute,
      COUNT(*) AS minute_count
    FROM
      mytable
    GROUP BY
      minute
  ) AS c
ON
  m.minute = c.minute
ORDER BY
  m.minute;</code>
登录后复制

说明:

  • 此查询使用 LEFT JOIN 来包含无活动的分钟。
  • generate_series() 函数生成表中最小分钟和最大分钟之间的一系列分钟。
  • COALESCE() 函数确保无活动的分钟的运行计数为 0。

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

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