首頁 > 資料庫 > 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板