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

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

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

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

PostgreSQL: クエリ結果の行数を分単位でカウントします

この記事では、PostgreSQL でウィンドウ関数を使用してクエリ結果の実行行数を分単位で計算する方法について説明します。

1. 1 分あたりの行数

次のクエリは 1 分あたりの行数を返します:

<code class="language-sql">SELECT
  COUNT(id) AS count,
  EXTRACT(hour FROM "when") AS hour,
  EXTRACT(minute FROM "when") AS minute
FROM
  mytable
GROUP BY
  hour,
  minute;</code>

2. 1 分あたりの累積行数

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
  minute;</code>

手順:

  • date_trunc('minute', "when") タイムスタンプ列「いつ」を最も近い分に切り詰めます。
  • COUNT(*) OVER (ORDER BY date_trunc('minute', "when")) 1 分あたりに実行される行数をカウントします。 ORDER BY 句は、集計された行の順序を指定します。
  • DISTINCT は、一意の分のみが返されるようにするために使用されます。これは、COUNT 集計関数が同じ 1 分間に複数の行を返すためです。

3. アクティビティのない分を含む

アクティビティのない分を結果に含める場合は、次のクエリを使用できます:

<code class="language-sql">SELECT
  m.minute,
  COALESCE(SUM(c.minute_count) OVER (ORDER BY m.minute), 0) AS running_count
FROM
  (
    SELECT
      generate_series(MIN(minute), MAX(minute), INTERVAL '1 minute') AS minute
    FROM
      (
        SELECT
          date_trunc('minute', "when") AS minute,
          COUNT(*) AS minute_count
        FROM
          mytable
        GROUP BY
          minute
      ) AS sub
  ) AS m
LEFT JOIN
  (
    SELECT
      date_trunc('minute', "when") AS minute,
      COUNT(*) AS minute_count
    FROM
      mytable
    GROUP BY
      minute
  ) AS c
ON
  m.minute = c.minute
ORDER BY
  m.minute;</code>

手順:

  • このクエリは LEFT JOIN を使用して、アクティビティのない分を含めます。
  • generate_series() この関数は、テーブル内の最小分と最大分の間の分の範囲を生成します。
  • COALESCE() 関数は、アクティビティのない分の実行カウントが 0 になるようにします。

以上がPostgreSQLで実行中の行数を分単位で計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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