PostgreSQL 9.0 이상에서는 GROUP BY
절을 사용하여 특정 필드의 연속된 숫자 값을 집계할 수 있습니다. 다음 쿼리는 회사, 직업 및 연도 필드가 포함된 테이블에서 이를 달성하는 방법을 보여줍니다.
1단계: 비연속 값 식별
<code class="language-sql">-- 步骤一:识别非连续值 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;</code>
이 쿼리는 연도 연속 여부에 따라 각 행에 그룹 수(group_cnt)를 할당합니다. group_cnt 1이 있는 행은 새 그룹의 시작을 나타냅니다.
2단계: 그룹 ID 정의
<code class="language-sql">-- 步骤二:定义分组 ID SELECT company, profession, year, SUM(group_cnt) OVER (ORDER BY company, profession, year) AS group_nr FROM qualification WHERE group_cnt = 1;</code>
이 쿼리는 각 그룹에 그룹 번호(group_nr)를 할당합니다. 매년 연속해서 같은 그룹에 속합니다.
3단계: 연속 연도 합계
<code class="language-sql">-- 步骤三:聚合连续年份 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;</code>
이 마지막 쿼리는 연속된 연도를 배열로 집계하고 연속되지 않은 행을 필터링합니다. 결과는 회사 및 직업별로 그룹화됩니다.
위의 세 단계를 따르면 PostgreSQL에서 연속된 값을 효과적으로 집계할 수 있습니다. qualification
테이블은 실제 테이블 이름으로 바꿔야 합니다.
위 내용은 GROUP BY를 사용하여 PostgreSQL에서 연속 숫자 값을 그룹화하고 집계하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!