ホームページ > データベース > mysql チュートリアル > PostgreSQL でユニークな企業や職業の連続した年をグループ化するにはどうすればよいですか?

PostgreSQL でユニークな企業や職業の連続した年をグループ化するにはどうすればよいですか?

DDD
リリース: 2025-01-09 13:36:41
オリジナル
991 人が閲覧しました

How to Group Consecutive Years for Unique Companies and Professions in PostgreSQL?

PostgreSQL 9.0 での連続した年数のグループ

この記事では、PostgreSQL 9.0 で固有の会社と職業の情報を取得しながら、連続した年をグループ化する方法について説明します。

この目標を達成するために、複数のステップからなるアプローチを使用します。まず、その年がシーケンスの最初であるかどうか、または今年と前年の差が 1 より大きいかどうかに基づいて「group_cnt」値を割り当てるサブクエリを使用して、連続していない年を特定します。

次に、企業や職種ごとにソートした年分のgroup_cnt値を合計してグループIDを定義します。これにより、連続しない年に連続したグループが作成されます。

最後に、別の派生テーブルを利用して、グループ ID に基づいて年を集計します。その結果、固有の企業および職業ごとに、連続した年がグループ化された年の配列が得られます。

クエリの例:

<code class="language-sql">SELECT company,
       profession,
       array_agg(year) AS years
FROM (
  SELECT company,
         profession,
         year,
         SUM(group_cnt) OVER (ORDER BY company, profession, year) AS group_nr
  FROM ( 
    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
  ) t1
) t2
GROUP BY company, profession, group_nr
ORDER BY company, profession, group_nr;</code>
ログイン後にコピー

出力:

<code> company | profession |      years
---------+------------+------------------
 Google  | Programmer | {2000}
 Google  | Sales      | {2000,2001,2002}
 Google  | Sales      | {2004}
 Mozilla | Sales      | {2002}
(4 rows)</code>
ログイン後にコピー

以上がPostgreSQL でユニークな企業や職業の連続した年をグループ化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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