une requete => somme horizontale et vertical

Eléphant du PHP | 97 Messages

03 mai 2005, 14:49

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 |
+----------+-------+

ViPHP
ViPHP | 2144 Messages

03 mai 2005, 14:52

Regardes dans la doc MYSQL du côté de la fonction SUM()

Invité
Invité n'ayant pas de compte PHPfrance

03 mai 2005, 15:19

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.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

03 mai 2005, 16:06

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)
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Administrateur PHPfrance
Administrateur PHPfrance | 430 Messages

04 mai 2005, 11:32

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