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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-19 00:57:10367浏览

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中文网其他相关文章!

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