Maison >base de données >tutoriel mysql >Comment obtenir les 5 valeurs les plus élevées d'une colonne Oracle SQL ?

Comment obtenir les 5 valeurs les plus élevées d'une colonne Oracle SQL ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-09 13:42:42310parcourir

How to Get the Top 5 Highest Values from an Oracle SQL Column?

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'analyse

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

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