首頁 > 資料庫 > mysql教程 > 如何在 PostgreSQL 中產生每分鐘的運行行計數,包括不活動的分鐘?

如何在 PostgreSQL 中產生每分鐘的運行行計數,包括不活動的分鐘?

Barbara Streisand
發布: 2025-01-19 01:02:12
原創
910 人瀏覽過

PostgreSQL:按分鐘產生運行行計數,包括非活動期

本文示範如何在 PostgreSQL 表中產生每分鐘的運行行數,即使有些分鐘沒有活動。

How to Generate a Running Row Count in PostgreSQL for Each Minute, Including Inactive Minutes?

方法 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板