Maison >base de données >tutoriel mysql >Comment regrouper et agréger des valeurs numériques consécutives dans PostgreSQL à l'aide de GROUP BY ?

Comment regrouper et agréger des valeurs numériques consécutives dans PostgreSQL à l'aide de GROUP BY ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-09 13:31:41520parcourir

Comment utiliser GROUP BY pour agréger des valeurs continues dans PostgreSQL

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

PostgreSQL 9.0 et versions ultérieures peuvent agréger des valeurs numériques consécutives dans un champ spécifique à l'aide de la clause GROUP BY. La requête suivante montre comment y parvenir dans une table contenant les champs entreprise, profession et année :

Étape 1 : Identifier les valeurs non continues

<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>

Cette requête attribue un nombre de groupes (group_cnt) à chaque ligne selon que les années sont consécutives ou non. Une ligne avec group_cnt 1 indique le début d'un nouveau groupe.

Étape 2 : Définir l'ID du groupe

<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>

Cette requête attribue un numéro de groupe (group_nr) à chaque groupe. Chaque année consécutive appartient au même groupe.

Étape 3 : Agréger les années consécutives

<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>

Cette requête finale regroupe les années consécutives dans un tableau et filtre les lignes non consécutives. Les résultats sont regroupés par entreprise et par profession.

En suivant les trois étapes ci-dessus, vous pouvez agréger efficacement des valeurs continues dans PostgreSQL. Notez que la table qualification doit être remplacée par le nom réel de votre table.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn