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