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

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-05 06:43:42198parcourir

How to Efficiently Count Consecutive Value Occurrences in a SQL Table?

Comptage des occurrences consécutives de valeurs dans un tableau

Dans une base de données avec un tableau contenant une colonne de valeurs, déterminer le nombre d'occurrences consécutives de chaque valeur peut être une tâche utile pour divers scénarios d’analyse de données. Cette question explore le défi d'atteindre ce décompte à l'aide de techniques SQL efficaces.

Les données fournies se composent d'un tableau avec une colonne Id et une colonne Nom contenant les valeurs « A », « B » et « C ». L'objectif est de compter les occurrences consécutives de ces valeurs dans la colonne Nom et de présenter les résultats comme suit :

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

Une approche tentée consistait à utiliser la fonction COUNT() sur une partition par Nom, mais cela a donné des résultats incorrects. Pour résoudre ce problème, une méthode alternative exploitant les numéros de ligne peut être utilisée.

L'extrait de code suivant présente une solution améliorée :

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 approche utilise la différence entre deux numéros de ligne pour identifier des événements. En soustrayant le numéro de ligne au sein de chaque groupe du numéro de ligne global, un identifiant de regroupement unique est créé pour chaque séquence de valeurs consécutives. La fonction COUNT() est ensuite appliquée à ces groupes, fournissant le nombre souhaité pour chaque occurrence consécutive de valeurs.

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