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