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
Libérer: 2025-01-09 13:31:41
original
591 Les gens l'ont consulté

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

-- 步骤一:识别非连续值
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;
Copier après la connexion

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

-- 步骤二:定义分组 ID
SELECT
  company,
  profession,
  year,
  SUM(group_cnt) OVER (ORDER BY company, profession, year) AS group_nr
FROM qualification
WHERE group_cnt = 1;
Copier après la connexion

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

-- 步骤三:聚合连续年份
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;
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal