← Tous les exercices
ROW_NUMBER, RANK, DENSE_RANK avec ex æquo
Partie 2 · ★★
Trois fonctions de classement, trois façons de traiter les ex æquo : ROW_NUMBER donne un rang strict, RANK gère les ex æquo avec des trous, DENSE_RANK sans trous. Table notes(nom, val) déjà remplie avec les valeurs 10, 10, 8, 7 (comme dans le tableau du cours).
Renvoie nom, val, rn, rk, dr, trié par val DESC, nom. ROW_NUMBER départage avec nom ; RANK et DENSE_RANK ne classent que sur val DESC.
import sqlite3 con = sqlite3.connect(":memory:") con.execute("CREATE TABLE notes(nom TEXT, val INTEGER)") con.executemany("INSERT INTO notes VALUES (?, ?)", [("a", 10), ("b", 10), ("c", 8), ("d", 7)]) sql = """ SELECT nom, val, ROW_NUMBER() OVER (ORDER BY val DESC, nom) AS rn, ___() OVER (ORDER BY val DESC) AS rk, ___() OVER (ORDER BY val DESC) AS dr FROM notes ORDER BY val DESC, nom """ rows = con.execute(sql).fetchall()
Ctrl/⌘+Entrée