Utilisez la fonction de fenêtre pour obtenir la ligne N avant de chaque groupe
Cet article présente comment utiliser la fonction de fenêtre SQL pour extraire efficacement les lignes N avant des données de groupe. Ceci est très pratique dans de nombreux scénarios d'analyse des données.
MySQL 8 et les versions supérieures fournissent trois fonctions de fenêtre communes:
, et ROW_NUMBER
. Ces fonctions allouent une valeur pour chaque ligne, de sorte que nous choisissons les premières lignes de chaque groupe. RANK
DENSE_RANK
Exemples de données:
En supposant que nous avons les ensembles de données suivants:
Le résultat de sortie de la comparaison des fonctions de trois fenêtres:
pkid | catid | value |
---|---|---|
1 | p01 | 100 |
2 | p01 | 90 |
3 | p01 | 90 |
4 | p01 | 80 |
5 | p01 | 80 |
6 | p01 | 80 |
7 | p01 | 70 |
8 | p01 | 60 |
9 | p01 | 50 |
10 | p01 | 40 |
Description de la fonction :
ROW_NUMBER
: attribue un numéro séquentiel unique à chaque ligne de chaque groupe, en commençant par 1. Par exemple, catid
est un p01
dont les 5 premières lignes ont row_number
valeurs de 1 à 5.
RANK
: Attribue un rang à chaque ligne de chaque groupe, les lignes de même valeur ayant le même rang. Par exemple, les 5 premières lignes où catid
est p01
ont rank
valeurs de 1 à 5 (même si certaines valeurs sont répétées).
DENSE_RANK
: similaire à RANK
, mais les lignes avec la même valeur sont classées consécutivement sans espaces. Par exemple, les 5 premières lignes où catid
est p01
ont dense_rank
valeurs de 1 à 5 (même si certaines valeurs sont répétées).
Choisissez la fonction de fenêtre appropriée :
La fonction de fenêtre que vous choisissez dépend de vos besoins spécifiques et de votre définition des « N premières lignes ». Si vous avez besoin que chaque ligne ait un classement unique, utilisez ROW_NUMBER
; si vous autorisez les lignes avec la même valeur à avoir le même classement, utilisez RANK
si vous avez besoin de classements consécutifs, utilisez DENSE_RANK
;
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!