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

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

Susan Sarandon
Susan Sarandon原創
2025-01-19 00:52:09677瀏覽

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

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

問題概述

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

計算總數的最佳方法

<code class="language-sql">SELECT DISTINCT date_trunc('minute', "when") AS minute,
       count(*) OVER (ORDER BY date_trunc('minute', "when")) AS running_ct
FROM   mytable
ORDER  BY 1;</code>

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

最快的方法

<code class="language-sql">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;</code>

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

處理無活動的分鐘

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

<code class="language-sql">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;</code>

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

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn