Maison >base de données >tutoriel mysql >Comment compter les occurrences consécutives de valeurs dans une table SQL ?

Comment compter les occurrences consécutives de valeurs dans une table SQL ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-05 15:40:40142parcourir

How to Count Consecutive Occurrences of Values in a SQL Table?

Regroupement des valeurs en fonction d'occurrences consécutives

Pour compter les occurrences consécutives de valeurs dans un tableau, une approche efficace consiste à calculer la différence dans les lignes nombres.

Considérez la requête suivante :

select name, count(*) 
from (
    select t.*,
           (row_number() over (order by id) -
            row_number() over (partition by name order by id)
           ) as grp
    from t
) t
group by grp, name;

Cette sous-requête génère deux numéros de ligne pour chaque ligne :

  • row_number() over (order by id) : un numéro séquentiel basé sur l'ordre global des lignes.
  • row_number() over (partition by ordre des noms par identifiant) : Un numéro séquentiel propre à chaque nom unique.

En soustrayant les deux numéros de lignes, on crée un identifiant "groupe" (grp) qui s'incrémente chaque fois que le nom change ou qu'il y a une occurrence consécutive distincte du même nom.

La requête finale regroupe ensuite les lignes en fonction de ce grp et compte les occurrences de chaque nom dans chaque groupe. Cela aboutit au nombre souhaité d'occurrences consécutives :

+------+------------+
| Name | Repetition |
+------+------------+
| A    |          2 |
| B    |          4 |
| C    |          1 |
| B    |          2 |
+------+------------+

Cette approche fournit un moyen efficace d'identifier des valeurs consécutives dans un tableau en exploitant la différence entre les numéros de ligne comme mécanisme de regroupement.

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