ホームページ > データベース > mysql チュートリアル > PostgreSQL で 1 分あたりの行の累計を計算するにはどうすればよいですか?

PostgreSQL で 1 分あたりの行の累計を計算するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-19 00:52:09
オリジナル
624 人が閲覧しました

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

PostgreSQL: 分ごとのクエリ行数の累計

問題の概要

その特定の時点までの 1 分あたりの合計行数を取得する必要があります。

合計を計算する最良の方法

<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>
ログイン後にコピー

このクエリはサブクエリに集計して、1 分あたりの行数を計算します。次に、ウィンドウ関数を使用して累計を実行します。

非アクティブな時間を処理します

アクティビティがない場合でも、すべての分が確実にカウントされるようにするには:

<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 で 1 分あたりの行の累計を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート