PostgreSQL:按分鐘產生運行行計數,包括非活動期
本文示範如何在 PostgreSQL 表中產生每分鐘的運行行數,即使有些分鐘沒有活動。
方法 1:僅運行活躍分鐘數
此方法使用視窗函數來計算存在活動的每分鐘的運行計數:
<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 1;</code>
date_trunc('minute', "when")
將行分組分組。 count(*) OVER (ORDER BY date_trunc('minute', "when"))
函數提供按分鐘排序的運行總計。
方法 2:包含不活動分鐘數
為了包含零活動的分鐘,我們使用 generate_series
建立完整的分鐘序列,並使用 LEFT JOIN
來合併計數:
<code class="language-sql">WITH cte AS ( SELECT date_trunc('minute', "when") AS minute, COUNT(*) AS minute_ct FROM mytable GROUP BY 1 ) SELECT m.minute, COALESCE(sum(cte.minute_ct) OVER (ORDER BY m.minute), 0) AS running_count FROM ( SELECT generate_series(min(minute), max(minute), interval '1 min') AS minute FROM cte ) m LEFT JOIN cte USING (minute) ORDER BY 1;</code>
CTE (cte
) 將行分組並按分鐘分組並計數。 generate_series
建立一系列跨越整個時間範圍的分鐘。 LEFT JOIN
將這個系列與 cte
中的計數結合起來,COALESCE
透過分配運行計數 0 來處理沒有活動的分鐘。則 sum() OVER (ORDER BY m.minute)
計算累積總和。
以上是如何在 PostgreSQL 中產生每分鐘的運行行計數,包括不活動的分鐘?的詳細內容。更多資訊請關注PHP中文網其他相關文章!