Page 1 sur 1

une requete => somme horizontale et vertical

Posté : 03 mai 2005, 14:49
par coolhead
Bonjour,

Lorsqu'on passe une requete tel que "SELECT * FROM table GROUP BY champ1"

on peut obtenir cela :

+----------+-------+
| champ1 | var1 |
+----------+-------+
| azerty | 2 |
+----------+-------+
| qwerty | 4 |
+----------+-------+
| abcdef | 17 |
+----------+-------+

Comment avoir aussi au passage le somme de 2 + 4 + 17 tel que :

+----------+-------+
| champ1 | var1 |
+----------+-------+
| azerty | 2 |
+----------+-------+
| qwerty | 4 |
+----------+-------+
| abcdef | 17 |
+----------+-------+
| TOTAL | 23 |
+----------+-------+

Posté : 03 mai 2005, 14:52
par iclo
Regardes dans la doc MYSQL du côté de la fonction SUM()

Posté : 03 mai 2005, 15:19
par Invité
j'ai déjà fait somme et j'obitne la somme ligne par ligne du nombre d'occurence du GROUP BY tel que :

+----------+-------+
| champ1 | var1 | SUM(var1)
+----------+-------+
| azerty | 2 | 5
+----------+-------+
| qwerty | 4 | 0
+----------+-------+
| abcdef | 17 | 21
+----------+-------+

Mais pas la somme total d'une colonne.

Posté : 03 mai 2005, 16:06
par sadeq
Il faut écrire ça:

Code : Tout sélectionner

SELECT * , (SELECT sum( champ2 ) FROM test) AS Total FROM `test` GROUP BY champ1


En effet, le total est une somme globale elle doit avoir une portée sur tous les enregistrements de la table

Sous MYSQL, un champ de SELECT peut être calculé par une sous-requête.

Et c'est normal que SQL répéte la même valeur du total dans toutes les lignes du SELECT principal. Parce qu'il n'y qu'un total et plusieurs lignes de réponse.

C'est au développeur de traiter le tuple résultat et formater un affichage tel qu'un tableau croisé.

Sous ACCESS les requête de croisment sont permises (voir du côté de la requête croisée dynamique TRANSFORM... SELECT... GROUP BY... PIVOT)

Posté : 04 mai 2005, 11:32
par cerber
STOP

Pour avoir des totaux dans les GROUP BY on peut utiliser depuis mysql 4.1.1 l'option WITH ROLLUP
http://dev.mysql.com/doc/mysql/fr/group ... fiers.html
SELECT champ1, SUM(champ2) FROM table GROUP BY champ1 WITH ROLLUP