Totaux cumulés

SyntaxeTotal cumulé

CTRL+C pour copier, CTRL+V pour coller
1
SELECT SUM(SUM(a)) OVER (ORDER BY b ROWS UNBOUNDED PRECEDING) 
2
FROM ...
3
GROUP BY b ...
SELECT SUM(SUM(a)) OVER (ORDER BY b ROWS UNBOUNDED PRECEDING) 
FROM ...
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

CTRL+C pour copier, CTRL+V pour coller
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;
SELECT d.sem, SUM(COUNT(*)) OVER (ORDER BY d.sem ROWS UNBOUNDED PRECEDING)
FROM ventes v, date d
WHERE v.dat=d.dat
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).