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
671 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!

source:php.cn
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