← Tous les exercices
ROWS contre RANGE avec des ex æquo
Partie 5 · ★★★★
Avec des ex æquo sur la clé d'ordre, RANGE traite toutes les lignes de même valeur comme un bloc, alors que ROWS compte les lignes une à une. Table t(d, v) : (1,10), (2,20), (2,30), (3,5).
Complète sql_rows (d, v, cum avec ORDER BY d, v et ROWS) et sql_range (même colonnes, ORDER BY d et RANGE).
import sqlite3 con = sqlite3.connect(":memory:") con.execute("CREATE TABLE t(d INTEGER, v INTEGER)") con.executemany("INSERT INTO t VALUES (?, ?)", [(1, 10), (2, 20), (2, 30), (3, 5)]) sql_rows = """ SELECT d, v, SUM(v) OVER (ORDER BY d, v ___ BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum FROM t ORDER BY d, v """ sql_range = """ SELECT d, v, SUM(v) OVER (ORDER BY d ___ BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum FROM t ORDER BY d, v """ cum_rows = [r[2] for r in con.execute(sql_rows)] cum_range = [r[2] for r in con.execute(sql_range)]
Ctrl/⌘+Entrée