Maison > base de données > tutoriel mysql > Comment puis-je récupérer les N premières lignes de chaque groupe dans SQL à l'aide des fonctions de fenêtre ?

Comment puis-je récupérer les N premières lignes de chaque groupe dans SQL à l'aide des fonctions de fenêtre ?

Susan Sarandon
Libérer: 2025-01-25 11:51:37
original
738 Les gens l'ont consulté

How Can I Retrieve the Top N Rows for Each Group in SQL Using Window Functions?

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!

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