Top N par groupe

Le Top N par groupe récupère les N premières lignes de chaque groupe, par exemple les 3 meilleurs produits par catégorie. On numérote les lignes avec ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...) dans une CTE ou une table dérivée, puis on filtre sur le rang. LIMIT seul ne le permet pas.

Exemple

WITH t AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY categorie ORDER BY ca DESC) AS rn FROM produits
)
SELECT * FROM t WHERE rn <= 3;

Notions voisines

Tout le glossaire