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中文網其他相關文章!