ホームページ >データベース >mysql チュートリアル >PostgreSQL で 1 分あたりの行の累計を計算するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。