ホームページ >データベース >mysql チュートリアル >PostgreSQLで実行中の行数を分単位で取得するにはどうすればよいですか?

PostgreSQLで実行中の行数を分単位で取得するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-19 00:42:09770ブラウズ

How to Get a Running Row Count by Minute in PostgreSQL?

PostgreSQL: 実行中の行数を分単位で計算する

この記事では、PostgreSQL で分ごとにグループ化されたクエリの実行行数を取得する方法を説明します。 課題は、アクティビティのない行も含めて、毎分行を正確にカウントすることです。

ウィンドウ関数の活用

最も効率的なソリューションは、PostgreSQL の強力なウィンドウ関数を利用します。 これらの関数は行のセットを操作し、複数の行にわたる計算を可能にします。 ここでは、分単位で区切られたウィンドウ内で

関数を使用します。COUNT

SELECT DISTINCTORDER 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。