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