Maison >base de données >tutoriel mysql >Comment obtenir les 5 valeurs les plus élevées d'une colonne Oracle SQL ?
Oracle SQL : Comment récupérer les 5 valeurs les plus élevées dans une colonne
Dans les requêtes de base de données, il est souvent nécessaire de limiter les résultats à des lignes présentant des caractéristiques spécifiques, telles que la valeur la plus élevée ou la plus basse dans une colonne spécifique. Dans Oracle SQL, vous pouvez utiliser des fonctions analytiques telles que RANK(), DENSE_RANK() ou ROW_NUMBER() à cette fin.
RANK() et DENSE_RANK() pour les valeurs les plus élevées
Les fonctions d'analyse telles que RANK() et DENSE_RANK() attribuent un classement à chaque ligne en fonction d'un classement spécifié. Pour récupérer les 5 premières valeurs les plus élevées d'une colonne, vous pouvez utiliser le format de requête suivant :
<code class="language-sql">SELECT * FROM ( SELECT <column_name>, RANK() OVER (ORDER BY <column_name> DESC) AS rnk FROM <table_name> ) WHERE rnk <= 5;</code>
RANK() attribue un rang numérique à chaque ligne, en commençant par la valeur la plus élevée, 1. DENSE_RANK() compresse les écarts lorsque des valeurs identiques existent, tout en attribuant des classements.
ROW_NUMBER() pour un nombre spécifique de lignes
La fonction d'analyseROW_NUMBER() attribue un numéro de série à chaque ligne. Vous pouvez l'utiliser pour récupérer un nombre spécifique de lignes quelle que soit leur valeur. Par exemple :
<code class="language-sql">SELECT * FROM ( SELECT <column_name>, ROW_NUMBER() OVER (ORDER BY <column_name> DESC) AS rnk FROM <table_name> ) WHERE rnk <= 5;</code>
Solution non analytique : utiliser ROWNUM
Bien que moins courant, vous pouvez également utiliser la pseudo-colonne ROWNUM pour limiter les résultats à un nombre spécifique de lignes. Cependant, il doit être utilisé avec prudence car ROWNUM est évalué avant la clause ORDER BY, ce qui peut conduire à des résultats imprévisibles.
Exemple : Obtenez l'employé le mieux payé
Pour illustrer l'utilisation de RANK() et DENSE_RANK() lors de la récupération des 5 employés les mieux payés :
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, RANK() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
Cette requête attribue à chaque employé un rang numérique en fonction de son salaire, où 1 représente l'employé le mieux payé. Il affiche ensuite les 5 meilleurs employés par ordre de salaire décroissant.
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!