首頁 > 資料庫 > mysql教程 > 如何計算 PostgreSQL 中每分鐘的運行總行數?

如何計算 PostgreSQL 中每分鐘的運行總行數?

Susan Sarandon
發布: 2025-01-19 00:52:09
原創
699 人瀏覽過

How to Calculate a Running Total of Rows per Minute in PostgreSQL?

PostgreSQL:按分鐘查詢行數的運行總計

問題概述

您需要檢索每分鐘直到該特定時間的行總數。

計算總數的最佳方法

SELECT DISTINCT date_trunc('minute', "when") AS minute,
       count(*) OVER (ORDER BY date_trunc('minute', "when")) AS running_ct
FROM   mytable
ORDER  BY 1;
登入後複製

此查詢使用 date_trunc() 函數僅提取「when」欄位的分鐘部分。作為視窗函數在此截斷的分鐘分量上聚合的 count() 函數提供運行總計。

最快的方法

SELECT minute, sum(minute_ct) OVER (ORDER BY minute) AS running_ct
FROM  (
   SELECT date_trunc('minute', "when") AS minute,
          count(*) AS minute_ct
   FROM   tbl
   GROUP  BY 1
   ) sub
ORDER  BY 1;
登入後複製

此查詢會聚合到子查詢中以計算每分鐘的行數。然後,它使用視窗函數執行運行總和。

處理無活動的分鐘

為了確保每個分鐘都被計算在內,即使那些沒有活動:

SELECT m.minute,
       COALESCE(sum(c.minute_ct) OVER (ORDER BY m.minute), 0) AS running_ct
FROM  (
   SELECT generate_series(date_trunc('minute', min("when")),
                          max("when"),
                          interval '1 min')
   FROM   tbl
   ) m(minute)
LEFT   JOIN (
   SELECT date_trunc('minute', "when") AS minute,
          count(*) AS minute_ct
   FROM   tbl
   GROUP  BY 1
   ) c USING (minute)
ORDER  BY 1;
登入後複製

此查詢使用 generate_series() 為範圍內的每一分鐘建立一行,並使用 LEFT JOIN 來計算和匯總基底表中的行。

以上是如何計算 PostgreSQL 中每分鐘的運行總行數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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