Totaux cumulés

SyntaxeTotal cumulé

1
SELECT SUM(SUM(a)) OVER (ORDER BY b ROWS UNBOUNDED PRECEDING) 
2
FROM ...
3
GROUP BY b ...

SUM(SUM(a)) OVER (ORDER BY b ROWS UNBOUNDED PRECEDING) permet de calculer la somme cumulée des "a" selon l'évolution "b".

On notera que "b" doit être un attribut de regroupement.

Remarque

SUM(COUNT(a)) est également valide.

Exemple

1
SELECT d.sem, SUM(COUNT(*)) OVER (ORDER BY d.sem ROWS UNBOUNDED PRECEDING)
2
FROM ventes v, date d
3
WHERE v.dat=d.dat
4
GROUP BY d.sem;

Complément

Notons qu'il est possible de "fenêtrer" les données, c'est à dire de définir une plage de valeurs bornée, en spécifiant une fenêtre de valeurs à l'aide de la clause "RANGE min max" à la place de "ROWS UNBOUNDED PRECEDING".

Le fenêtrage de données est particulièrement utile dans le cas de données temporelles (cf. Oracle 9i : Notions fondamentales[1]).