Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/04/2003, 18h36   #1
Invité de passage
 
Inscription : avril 2003
Messages : 4
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 4
Points : 1
Points : 1
Par défaut [RESOLU] Addition et multiplications

Bonjour,

Je recherche à faire la somme d'un panier (commerce en ligne):

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
TABLE "produits"
+------------+------+
| produit_id | prix |
+------------+------+
| 1          |  10  |
+------------+------+
| 2          |  20  |
+------------+------+
 
 
TABLE "commande"
+-----------------+------------+----------+------------+
| commande_id     | produit_id | quantite | panier_id  |
+-----------------+------------+----------+------------+
|   1             |   1        |     3    |       1    |
+-----------------+------------+----------+------------+
|   2             |   2        |     3    |       1    |
+-----------------+------------+----------+------------+
(Je vous epargne la table panier, inutile ici.)

Comment faire donc le total du panier (90 euros bien sûr) ?

Je suis parti de cette requete mais ce n'est pas bien sur suffisant...

Code :
1
2
3
4
 
SELECT SUM( p.prix )
FROM commandes c LEFT JOIN produits p USING ( produit_id )
WHERE c.panier_id = 1 ;
Est-ce en fait vraiment possible avec mysql ??

Merci pour votre aide
Yayel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2003, 19h14   #2
Membre confirmé
 
Avatar de omiossec
 
Inscription : juin 2002
Messages : 219
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2002
Messages : 219
Points : 240
Points : 240
Envoyer un message via AIM à omiossec Envoyer un message via Skype™ à omiossec
pourquoi ne pas utiliser une construction du type

Code :
1
2
3
4
SELECT SUM( p.prix * c.quantite ) 
FROM commandes c LEFT JOIN produits p USING ( produit_id ) 
WHERE c.panier_id = 1
GROUP BY commande_id
__________________
Olivier Miossec
omiossec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2003, 19h17   #3
Invité de passage
 
Inscription : avril 2003
Messages : 4
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 4
Points : 1
Points : 1
C'est effectivement si bête !

Merci !

Mais quel est l'interêt du "GROUP BY" pour un SUM ?
Yayel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2003, 19h27   #4
Membre confirmé
 
Avatar de omiossec
 
Inscription : juin 2002
Messages : 219
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2002
Messages : 219
Points : 240
Points : 240
Envoyer un message via AIM à omiossec Envoyer un message via Skype™ à omiossec
Citation:
Envoyé par Yayel
C'est effectivement si bête !

Merci !

Mais quel est l'interêt du "GROUP BY" pour un SUM ?
Sum est ce que l'on appelle une fonction d'agrégation, non pas qu'elle est un quelquonque bagage universitaire mais elle calcule une valeur à partir d'un groupe de valeur. c'est par ce qu'il a besoin d'un groupe que l'on a besoin de faire un GROUP BY
Par contre il ne faut pas confondre ces fonctions avec les opérateur arithmetique (faisant des opération terme à terme)
__________________
Olivier Miossec
omiossec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2003, 19h44   #5
Invité de passage
 
Inscription : avril 2003
Messages : 4
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 4
Points : 1
Points : 1
OK. J'ai juste relevé que le GROUP BY était en effet indispensable pour un COUNT() par exemple, mais il se trouve que ta requête fonctionne très bien sans (du moins sous mySQL).
Yayel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2003, 20h06   #6
Membre confirmé
 
Avatar de omiossec
 
Inscription : juin 2002
Messages : 219
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2002
Messages : 219
Points : 240
Points : 240
Envoyer un message via AIM à omiossec Envoyer un message via Skype™ à omiossec
Citation:
Envoyé par Yayel
OK. J'ai juste relevé que le GROUP BY était en effet indispensable pour un COUNT() par exemple, mais il se trouve que ta requête fonctionne très bien sans (du moins sous mySQL).
Il est possible en effet de ne pas utiliser group by mais uniquement dans le cas ou la fonction d'agragation est seule dans la liste des champs.

en d'autre terme
Code :
SELECT SUM( p.prix * c.quantite ) .... FROM TABLE
est permis

mais

Code :
SELECT SUM( p.prix * c.quantite ), commande_id  .... FROM TABLE
ne l'est pas
__________________
Olivier Miossec
omiossec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2003, 23h15   #7
Invité de passage
 
Inscription : avril 2003
Messages : 4
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 4
Points : 1
Points : 1
Merci beaucoup pour ces explications.
Yayel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h47.


 
 
 
 
Partenaires

Hébergement Web