首頁 > 資料庫 > mysql教程 > 如何使用 GROUP BY 在 PostgreSQL 中對連續數值進行分組和聚合?

如何使用 GROUP BY 在 PostgreSQL 中對連續數值進行分組和聚合?

Susan Sarandon
發布: 2025-01-09 13:31:41
原創
591 人瀏覽過

PostgreSQL 中使用 GROUP BY 聚合連續數值的方法

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

PostgreSQL 9.0 及更高版本可以使用 GROUP BY 子句來聚合特定欄位中的連續數值。以下查詢示範如何在包含公司、職業和年份欄位的表格中實現此目標:

步驟一:辨識非連續值

-- 步骤一:识别非连续值
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;
登入後複製

此查詢是否會根據每行的年份連續分配一個分組計數 (group_cnt)。 group_cnt 為 1 的行表示新群組的開始。

步驟二:定義分組 ID

-- 步骤二:定义分组 ID
SELECT
  company,
  profession,
  year,
  SUM(group_cnt) OVER (ORDER BY company, profession, year) AS group_nr
FROM qualification
WHERE group_cnt = 1;
登入後複製

此查詢為每個群組指派群組號碼 (group_nr)。每個連續年份都屬於同一個組別。

步驟三:聚合連續年份

-- 步骤三:聚合连续年份
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;
登入後複製

此最終查詢將連續年份聚合到陣列中,並過濾掉非連續行。結果按公司和職業分組。

經過上述三個步驟,即可在 PostgreSQL 中有效地聚合連續數值。 請注意,qualification 表應替換為您的實際表名。

以上是如何使用 GROUP BY 在 PostgreSQL 中對連續數值進行分組和聚合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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