首頁 > 資料庫 > mysql教程 > 如何在 PostgreSQL 中取得每分鐘運行的行數?

如何在 PostgreSQL 中取得每分鐘運行的行數?

Mary-Kate Olsen
發布: 2025-01-19 00:42:09
原創
743 人瀏覽過

How to Get a Running Row Count by Minute in PostgreSQL?

PostgreSQL:以分鐘計算運行行數

本文示範如何取得查詢的運行行數(在 PostgreSQL 中按分鐘分組)。 挑戰在於準確計算每分鐘的行數,即使是那些沒有活動的行。

利用視窗函數

最有效的解決方案是利用 PostgreSQL 強大的視窗函數。 這些函數對行集進行操作,從而實現跨多行的計算。 在這裡,我們在按分鐘分區的視窗中使用 COUNT 函數。

使用 SELECT DISTINCTORDER BY

進行高效查詢

此查詢使用 SELECT DISTINCT 確保唯一的分鐘條目,並使用帶有視窗函數的 COUNT 來產生運行計數。 ORDER BY 確保每分鐘間隔的正確累積和。

<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>
登入後複製

理解視窗函數語法

讓我們分解一下視窗函數:

  • COUNT(*):計算每個分鐘分區內的行數。
  • OVER (ORDER BY date_trunc('minute', "when")):將視窗定義為一系列行,按分鐘排序,從頭開始累積計數。

零活動處理分鐘

要包含沒有活動的分鐘(零行),我們使用 generate_series 建立一系列分鐘,然後執行 LEFT JOIN 來包含這些分鐘,即使它們在表中缺少相應的條目:

<code class="language-sql">SELECT DISTINCT
       minute, count(c.minute) OVER (ORDER BY minute) AS running_ct
FROM  (
   SELECT generate_series(date_trunc('minute', min("when")), max("when"), interval '1 min')
   FROM   mytable
   ) m(minute)
LEFT   JOIN (SELECT date_trunc('minute', "when") AS minute FROM mytable) c USING (minute)
ORDER  BY 1;</code>
登入後複製

效能注意事項

雖然視窗函數通常最適合大型資料集,但對於較小的資料集,使用 SUM() 的替代方案可能會提供更好的效能。此方法首先將每分鐘的行分組和計數,然後使用 SUM() 計算運行總計:

<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>
登入後複製

最佳方法取決於您的資料集大小和效能要求。 建議測試這兩種方法,以確定適合您的特定用例的最有效的解決方案。

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

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