>데이터 베이스 >MySQL 튜토리얼 >GROUP BY를 사용하여 PostgreSQL에서 연속 숫자 값을 그룹화하고 집계하는 방법은 무엇입니까?

GROUP BY를 사용하여 PostgreSQL에서 연속 숫자 값을 그룹화하고 집계하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-09 13:31:41522검색

GROUP BY를 사용하여 PostgreSQL에서 연속 값을 집계하는 방법

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

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.