ホームページ >データベース >mysql チュートリアル >PostgreSQLで実行中の行数を分単位で取得するにはどうすればよいですか?
PostgreSQL: 実行中の行数を分単位で計算する
この記事では、PostgreSQL で分ごとにグループ化されたクエリの実行行数を取得する方法を説明します。 課題は、アクティビティのない行も含めて、毎分行を正確にカウントすることです。
ウィンドウ関数の活用
最も効率的なソリューションは、PostgreSQL の強力なウィンドウ関数を利用します。 これらの関数は行のセットを操作し、複数の行にわたる計算を可能にします。 ここでは、分単位で区切られたウィンドウ内で 関数を使用します。COUNT
と SELECT DISTINCT
ORDER 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>
パフォーマンスに関する考慮事項
一般にウィンドウ関数は大規模なデータセットには最適ですが、小規模なデータセットの場合は、 を使用した代替方法の方がパフォーマンスが向上する可能性があります。このアプローチでは、まずグループ化して 1 分ごとの行数をカウントし、次に 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 中国語 Web サイトの他の関連記事を参照してください。