Cohabitation de ROWNUM et ORDER BY sous ORACLE

Dans le cadre d’une gestion en liste paginée et triable, on est tenté d’utiliser la fonctionnalité ROWNUM  pour la pagination (c’est à dire les n premiers résultats) et le ORDER BY pour le tri, sauf que sous ORACLE, le ORDER BY s’applique après le ROWNUM, donc si vous trier par nom les 25 premiers résultats d’une liste de 1000 noms, vous aurez en première page, les 25 premiers résultats de la requete non trié (c’est à dire un échantillon de A à Z) trié par nom…

Pour éviter ça, il faut encapsuler la première requète dans une deuxième :

SELECT * FROM
   (SELECT champs FROM table ORDER BY champ_a_trier)
WHERE ROWNUM < 25;

Sources : http://archives.postgresql.org/pgsql-general/2001-07/msg01243.php

Un commentaire

  1. je me demande si ça n’a pas un impact sur les performances dans le cas où on a un très grand nombre de lignes dans la table

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *