Classements

Projection de classement

SELECT RANK() OVER (PARTITION BY a ORDER BY b DESC), ...
 FROM ...
GROUP BY a ...

RANK() OVER (PARTITION BY a ORDER BY b DESC) permet de projeter le classement de l'enregistrement par rapport au critère "b" (qui peut être un agrégat), partitionné par le critère "a".

PARTITION BY est optionnel.

On notera que l'attribut de partitionnement du classement "a" est forcément un attribut de regroupement, il doit donc être déclaré dans le GROUP BY.

SELECT * FROM
(
SELECT p.titre AS titre, count(*) AS ventes, RANK() OVER (ORDER BY count(*) DESC) AS rank
FROM ventes v, produit p
WHERE p.isbn=v.pro
GROUP BY p.titre
)
WHERE rank <= 100;
AccueilExtensions Oracle > Classements< PrécédentSuivant >