ホームページ >データベース >mysql チュートリアル >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 サイトの他の関連記事を参照してください。