Extraction des N valeurs les plus élevées dans Oracle SQL
Défi : Comment sélectionner efficacement un nombre spécifique de lignes contenant les valeurs les plus élevées d'une colonne particulière dans une requête Oracle SQL ?
Solution :
L'approche optimale utilise les fonctions analytiques d'Oracle, en particulier RANK()
ou DENSE_RANK()
:
Emploi de la fonction RANK()
:
<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 récupère les 5 salaires les plus élevés, ainsi que les numéros d'employés correspondants.
Utilisation de la fonction DENSE_RANK()
:
<code class="language-sql">select * from ( select empno, sal, dense_rank() over (order by sal desc) as rnk from emp ) where rnk <= 5;</code>
DENSE_RANK()
offre un avantage sur RANK()
en éliminant les écarts dans le classement lorsque plusieurs lignes partagent la même valeur.
Considérations importantes :
ROW_NUMBER()
puisse également y parvenir, RANK()
ou DENSE_RANK()
sont généralement préférés pour sélectionner les N premières valeurs car elles gèrent les égalités avec plus de grâce.ROWNUM
comme solution autonome. Son application avant la clause ORDER BY
peut conduire à des résultats inexacts.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!