ホームページ >データベース >mysql チュートリアル >PostgreSQL で非アクティブな分を含む分ごとの実行行数を生成するにはどうすればよいですか?
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_count FROM mytable ORDER BY 1;</code>
date_trunc('minute', "when")
は行を分ごとにグループ化します。 count(*) OVER (ORDER BY date_trunc('minute', "when"))
関数は、分単位で並べ替えられた累計を提供します。
方法 2: 非アクティブな時間を含める
アクティビティがゼロの分を含めるには、generate_series
を使用して完全な分のシーケンスを作成し、LEFT JOIN
を使用してカウントを組み込みます。
<code class="language-sql">WITH cte AS ( SELECT date_trunc('minute', "when") AS minute, COUNT(*) AS minute_ct FROM mytable GROUP BY 1 ) SELECT m.minute, COALESCE(sum(cte.minute_ct) OVER (ORDER BY m.minute), 0) AS running_count FROM ( SELECT generate_series(min(minute), max(minute), interval '1 min') AS minute FROM cte ) m LEFT JOIN cte USING (minute) ORDER BY 1;</code>
CTE (cte
) は行を分ごとにグループ化し、カウントします。 generate_series
は、時間範囲全体にわたる一連の分を作成します。 LEFT JOIN
は、この系列を cte
からのカウントと結合し、COALESCE
は実行カウント 0 を割り当てることでアクティビティのない分を処理します。sum() OVER (ORDER BY m.minute)
は累積合計を計算します。
以上がPostgreSQL で非アクティブな分を含む分ごとの実行行数を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。