ホームページ > データベース > mysql チュートリアル > GROUP BY を使用して PostgreSQL で連続する数値をグループ化および集計する方法

GROUP BY を使用して PostgreSQL で連続する数値をグループ化および集計する方法

Susan Sarandon
リリース: 2025-01-09 13:31:41
オリジナル
524 人が閲覧しました

PostgreSQL で GROUP BY を使用して連続値を集計する方法

How to Group and Aggregate Consecutive Numeric Values in PostgreSQL Using GROUP BY?

PostgreSQL 9.0 以降では、GROUP BY 句を使用して特定のフィールドの連続した数値を集計できます。次のクエリは、会社、職業、年のフィールドを含むテーブルでこれを実現する方法を示しています:

ステップ 1: 非連続値を特定する

<code class="language-sql">-- 步骤一:识别非连续值
SELECT
  company,
  profession,
  year,
  CASE
    WHEN ROW_NUMBER() OVER (PARTITION BY company, profession ORDER BY year) = 1
    OR year - LAG(year, 1, year) OVER (PARTITION BY company, profession ORDER BY year) > 1
    THEN 1
    ELSE 0
  END AS group_cnt
FROM qualification;</code>
ログイン後にコピー

このクエリは、年が連続しているかどうかに基づいて、各行にグループ数 (group_cnt) を割り当てます。 group_cnt 1 の行は、新しいグループの開始を示します。

ステップ 2: グループ ID を定義する

<code class="language-sql">-- 步骤二:定义分组 ID
SELECT
  company,
  profession,
  year,
  SUM(group_cnt) OVER (ORDER BY company, profession, year) AS group_nr
FROM qualification
WHERE group_cnt = 1;</code>
ログイン後にコピー

このクエリは、各グループにグループ番号 (group_nr) を割り当てます。連続する各年は同じグループに属します。

ステップ 3: 連続した年を集計する

<code class="language-sql">-- 步骤三:聚合连续年份
SELECT
  company,
  profession,
  ARRAY_AGG(year) AS years
FROM qualification
WHERE group_cnt <> 0
GROUP BY
  company,
  profession,
  group_nr
ORDER BY
  company,
  profession,
  group_nr;</code>
ログイン後にコピー

この最後のクエリは、連続した年を配列に集計し、連続していない行を除外します。結果は企業および職種ごとにグループ化されています。

上記の 3 つの手順に従うことで、PostgreSQL で連続値を効果的に集計できます。 qualification テーブルは実際のテーブル名に置き換える必要があることに注意してください。

以上がGROUP BY を使用して PostgreSQL で連続する数値をグループ化および集計する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート