Maison >base de données >tutoriel mysql >Comment puis-je récupérer efficacement les N valeurs les plus élevées dans Oracle SQL ?
Extraction des N premiers enregistrements dans Oracle SQL
Besoin de récupérer un nombre spécifique de lignes avec les valeurs les plus élevées ou les plus basses dans une colonne ? Les fonctions analytiques d'Oracle, comme RANK()
et DENSE_RANK()
, fournissent des solutions efficaces.
Par exemple, pour identifier les cinq employés les mieux rémunérés, utilisez RANK()
:
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, RANK() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
DENSE_RANK()
propose une variante, éliminant les écarts de classement causés par les égalités :
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, DENSE_RANK() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
La meilleure approche dépend de vos besoins spécifiques.
ROW_NUMBER()
attribue un rang unique à chaque ligne, mais supprime arbitrairement les égalités, ce qui peut ne pas convenir à tous les scénarios.
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, ROW_NUMBER() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
Bien qu'une méthode non analytique utilisant ROWNUM
existe, elle est moins fiable en raison d'incohérences potentielles et est généralement moins préférée. Les méthodes de fonctions analytiques ci-dessus fournissent des résultats plus robustes et prévisibles.
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!