Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 14/05/2011, 08h17   #1
Invité de passage
 
Inscription : mars 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 12
Points : 4
Points : 4
Par défaut Faire la somme d'une colonne obtenue avec la fonction SUM()

Bonjour,

Je me permets de solliciter votre aide aujourd'hui car je 'bloque' sur une requête SQL et je ne m'en sors pas malgré mes nombreuses recherches...

Alors voilà... je dois faire ressortir le bénéfice mensuel des ventes.

J'ai la requête me permettant d'avoir le bénéfice mensuel pour chaque article:

Code :
1
2
3
4
5
6
SELECT EXTRACT(YEAR_MONTH FROM datefacture) AS periode, 
  ((PUHT - prix_achat) * SUM(qte)) AS 'beneficeart'
FROM article A, ligne L, Facture F
WHERE A.idarticle = L.article_idarticle 
  AND F.idfacture=L.facture_idfacture
GROUP BY periode, A.idarticle
Résultat renvoyé:
periode beneficeart
201105 90.00
201105 33.00
201105 300.00
201105 35.00
201105 100.00
201105 14.00
201105 5.50
201105 15.00
201105 12.00
201105 1.50

Mais je voudrais avoir la somme de la colonne calculée 'beneficeart' qui doit me retourner 606. et je n'y parviens pas.

Lorsque je tente de faire la somme de cette colonne MySQL m'affiche des erreurs.

Je vous remercie d'avance pour votre aide.

Cordialement.
gouzou38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 09h25   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 001
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 001
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Il suffit d'imbriquer ta requête dans une autre mais en écrivant les jointures avec la syntaxe normalisée depuis 1992 et en utilisant les alias partout afin de savoir d'où viennent les colonnes, c'est encore mieux.
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT periode, SUM(beneficeart) AS Total
FROM
(
	SELECT EXTRACT(YEAR_MONT FROM f.datefacture) AS periode,
		(a.PUHT - a.prix_achat) * SUM(qte) AS beneficeart
	FROM article a
	INNER JOIN ligne l ON l.article_idarticle = a.idarticle
		INNER JOIN Facture f ON f.idfacture = l.facture_idfacture
	GROUP BY periode, a.idarticle
) tmp
GROUP BY periode
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 09h30   #3
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
bonjour

cela aurait bien d'indiquer la structure des tables !

j'imagine mal que les prix n’évoluent pas au cours d'une même période

il vous faut donc faire une requête qui calcule pour un article pendant une période, avec un même prix (vente et achat), la quantité vendue

et après calculer le bénéfice

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT Periode,
           Article,
          SUM((PUHT - prix_achat) * Nb) AS 'beneficeart'       
FROM
    (SELECT Periode,
                Article,
                PUHT,
                Prix_Achat,
                SUM(Q) Nb
         FROM ..... -- en utilisant la norme SQL :calim2:
         GROUP BY Periode,
                Article,
                PUHT,
                Prix_Achat) AS Compta
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 10h01   #4
Invité de passage
 
Inscription : mars 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 12
Points : 4
Points : 4
Merci à tous les 2 pour vos réponses et les aides apportées.

Comme il s'agit d'une gestion des prix simplifiée la correction apportée par CinePhil me convient très bien.
Ceci dit, il est vrai que dans la réalité les prix peuvent fluctuer au cours d'n même exercice comptable. Je prends note des 2 solutions, s'il me reste du temps je travaillerais la deuxieme.

Pour information, voici la structure (simplifiée) des tables concernées:

article(idarticle, nomarticle, PUHT, prix_achat,...)
facture(idfacture, #users_iduser, datefacure,...)
ligne (#facture_idfacture, #article_idarticle, qte)

Bien cordialement.

PS: Je passe le sujet en résolu mais si vous avez d'autres conseils/remarques je suis toujours preneur.

Merci encore pour votre réactivité et les réponses!
gouzou38 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 13h25.


 
 
 
 
Partenaires

Hébergement Web