Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[MySQL] R

14 réponses
Avatar
zebul0n
Bonjour,

Ayant un petit problème pour générer un graphique à partir des résultats
de ma requête SQL, je vous soumet mon problème.

j'ai deux tables :

______________________________
| commande |
|------------------------------|
| id | nom | montant | facture |
|______________________________|

______________________________
| facture |
|------------------------------|
| id | commande_id | echeance |
|______________________________|

et j'effectue la requête suivante afin de récupérer les montants des
commandes par mois :

SELECT SUM(commande.montant) ca, MONTH(facture.echeance)
facture_echeance_mois FROM facture, commande WHERE commande.facture = '1'
AND YEAR(facture.echeance)='2007' AND facture.commande_id = commande.id
GROUP BY facture_echeance_mois ORDER BY facture_echeance_mois
ASC, SUM(commande.montant) DESC;

Je n'ai des commandes qu'en mars, avril, juillet et août.

J'obtiens donc le résultat suivant :
_____________________________________
| ca | facture_echeance_mois |
|_____________________________________|
| 27584.10 | 3 |
| 1008.00 | 4 |
| 11393.55 | 7 |
| 888.12 | 8 |
|_____________|_______________________|

C'est bien le résultat escompté et les résultats sont corrects.

Cependant, j'aimerais obtenir le résultat suivant :
_____________________________________
| ca | facture_echeance_mois |
|_____________________________________|
| 0 | 1 |
| 0 | 2 |
| 27584.10 | 3 |
| 1008.00 | 4 |
| 0 | 5 |
| 0 | 6 |
| 11393.55 | 7 |
| 888.12 | 8 |
| 0 | 9 |
| 0 | 10 |
| 0 | 11 |
| 0 | 12 |
|_____________|_______________________|

afin de générer un graphique avec les montants commandés par mois.

Pourriez vous m'aider à modifier ma requête afin d'obtenir les résultats
pour tous les mois de l'année.
J'aimerais que cela soit possible, cela m'éviterais de devoir ensuite
traiter les résultats avec php.

PS: Je dois garder ces deux tables distinctes (je n'ai pas mis tous
les champs de chacune de ces tables)

Merci pour votre aide.

Cordialement,

zeb.

10 réponses

1 2
Avatar
Fred Brouard - SQLpro
Bonjour,

SQL ne saurait inventé des donnés qui n'existe pas dans votre système
d'information. Or à la base ces dates n'existent probablement pas dans
votre SI. Il y a là à l'évidence un défaut de votre modèle de données.

Solution : Il faut donc ajouter les données manquantes.

Lisez l'article que j'ai écrit sur le sujet :
http://sqlpro.developpez.com/cours/gestiontemps/

A +

zebul0n a écrit :
Bonjour,

Ayant un petit problème pour générer un graphique à partir des résultats
de ma requête SQL, je vous soumet mon problème.

j'ai deux tables :

______________________________
| commande |
|------------------------------|
| id | nom | montant | facture |
|______________________________|

______________________________
| facture |
|------------------------------|
| id | commande_id | echeance |
|______________________________|

et j'effectue la requête suivante afin de récupérer les montants des
commandes par mois :

SELECT SUM(commande.montant) ca, MONTH(facture.echeance)
facture_echeance_mois FROM facture, commande WHERE commande.facture = '1'
AND YEAR(facture.echeance)='2007' AND facture.commande_id = commande.id
GROUP BY facture_echeance_mois ORDER BY facture_echeance_mois
ASC, SUM(commande.montant) DESC;

Je n'ai des commandes qu'en mars, avril, juillet et août.

J'obtiens donc le résultat suivant :
_____________________________________
| ca | facture_echeance_mois |
|_____________________________________|
| 27584.10 | 3 |
| 1008.00 | 4 |
| 11393.55 | 7 |
| 888.12 | 8 |
|_____________|_______________________|

C'est bien le résultat escompté et les résultats sont corrects.

Cependant, j'aimerais obtenir le résultat suivant :
_____________________________________
| ca | facture_echeance_mois |
|_____________________________________|
| 0 | 1 |
| 0 | 2 |
| 27584.10 | 3 |
| 1008.00 | 4 |
| 0 | 5 |
| 0 | 6 |
| 11393.55 | 7 |
| 888.12 | 8 |
| 0 | 9 |
| 0 | 10 |
| 0 | 11 |
| 0 | 12 |
|_____________|_______________________|

afin de générer un graphique avec les montants commandés par mois.

Pourriez vous m'aider à modifier ma requête afin d'obtenir les résultats
pour tous les mois de l'année.
J'aimerais que cela soit possible, cela m'éviterais de devoir ensuite
traiter les résultats avec php.

PS: Je dois garder ces deux tables distinctes (je n'ai pas mis tous
les champs de chacune de ces tables)

Merci pour votre aide.

Cordialement,

zeb.




--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
nobody
Fred Brouard - SQLpro a écrit :
Bonjour,

SQL ne saurait inventé des donnés qui n'existe pas dans votre système
d'information. Or à la base ces dates n'existent probablement pas dans
votre SI. Il y a là à l'évidence un défaut de votre modèle de données.

Solution : Il faut donc ajouter les données manquantes.

Lisez l'article que j'ai écrit sur le sujet :
http://sqlpro.developpez.com/cours/gestiontemps/

A +





traduction du laius SQL ne sait pas faire
Avatar
Fred Brouard - SQLpro
nobody a écrit :
Fred Brouard - SQLpro a écrit :
Bonjour,

SQL ne saurait inventé des donnés qui n'existe pas dans votre système
d'information. Or à la base ces dates n'existent probablement pas dans
votre SI. Il y a là à l'évidence un défaut de votre modèle de données.

Solution : Il faut donc ajouter les données manquantes.

Lisez l'article que j'ai écrit sur le sujet :
http://sqlpro.developpez.com/cours/gestiontemps/

A +





traduction du laius SQL ne sait pas faire



tiens un émule du docteur Elios ?

En tout cas cette remarque prouve le crétinisme de son auteur !

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
nobody
Fred Brouard - SQLpro a écrit :
nobody a écrit :
Fred Brouard - SQLpro a écrit :
Bonjour,

SQL ne saurait inventé des donnés qui n'existe pas dans votre système
d'information. Or à la base ces dates n'existent probablement pas
dans votre SI. Il y a là à l'évidence un défaut de votre modèle de
données.

Solution : Il faut donc ajouter les données manquantes.

Lisez l'article que j'ai écrit sur le sujet :
http://sqlpro.developpez.com/cours/gestiontemps/

A +





traduction du laius SQL ne sait pas faire



tiens un émule du docteur Elios ?

En tout cas cette remarque prouve le crétinisme de son auteur !

A +




Suite à des discutions sur le "cas Brouard" dans des salons pro consacré
au SGBDR je savait que la modestie n'était pas une qualité évidente chez
Brouard maintenant je sait qu'il en va de même de la politesse.

La grande spécialité de Brouard étant tout ce qui n'est pas SQL ou remet
en cause SQL est de la "merde".

Et comme il me semble que le "docteur Elios" cité en référence l'a dit :

"l'informatique c'est comme le tennis ; les profs de tennis et ceux qui
écrivent des livres sur le tennis sont rarement bien classé et encore
plus rarement des champions".

Que fait Brouard dans le monde SQL ?

Quand à ma remarque qui relève une lacune de SQL elle parfaitement juste
et indique simplement que SQL ne sait pas générer une série de données
correctement si des champs ne sont pas valorisé dans le cas présent une
série de valeur pour des mois si des mois n'ont aucune valeur.
Chose que certains produits que Brouard considère comme de la "merde"
savent parfaitement faire.

Post-scriptum: Mon correcteur orthographique propose pour "Brouard"
broutard et brocard c'est peut être cela l'intelligence artificielle ?
Avatar
Joe
nobody a écrit :
Suite à des discutions sur le "cas Brouard" dans des salons pro consacré
au SGBDR je savait que la modestie n'était pas une qualité évidente chez
Brouard maintenant je sait qu'il en va de même de la politesse.



mais c'est le Docteur qui cause anonymement. On n'assume plus ?
Avatar
nobody
Fred Brouard - SQLpro a écrit :
nobody a écrit :
Fred Brouard - SQLpro a écrit :
Bonjour,

SQL ne saurait inventé des donnés qui n'existe pas dans votre système
d'information. Or à la base ces dates n'existent probablement pas
dans votre SI. Il y a là à l'évidence un défaut de votre modèle de
données.

Solution : Il faut donc ajouter les données manquantes.

Lisez l'article que j'ai écrit sur le sujet :
http://sqlpro.developpez.com/cours/gestiontemps/

A +








J'ai lu à l'instant l'article mentionné et vu les erreurs monstrueuses
que ne ferait pas un enfant de 7ans (du moins je ne les faisais plus à
7ans) sur la gestion du temps cette article n'est surtout pas à
recommandé pour gérer correctement des dates et des notions temporelles
d'ailleurs si le calendrier Grégorien (notre calendrier) faisait les
mêmes erreur que Brouard nous serions en Juin 2008 et non début Août 2007.
Avatar
nobody
Joe a écrit :
nobody a écrit :
Suite à des discutions sur le "cas Brouard" dans des salons pro
consacré au SGBDR je savait que la modestie n'était pas une qualité
évidente chez Brouard maintenant je sait qu'il en va de même de la
politesse.



mais c'est le Docteur qui cause anonymement. On n'assume plus ?



erreur mais je le connais et je peux lui demander de faire un petit
coucou ici (pour info si il ne vient plus ici c'est parce que il est en
"retraite" )
Avatar
Joe
nobody a écrit :
erreur mais je le connais et je peux lui demander de faire un petit
coucou ici (pour info si il ne vient plus ici c'est parce que il est en
"retraite" )



même adresse IP, c'est sur que tu le connais très bien :-)
et pour ton info sur sa retraite, ce matin, il a posté sur une liste
pour faire un acte de candidature ;-)
bien tenté mais tu ne trompes personne
Avatar
nobody
Joe a écrit :
nobody a écrit :
erreur mais je le connais et je peux lui demander de faire un petit
coucou ici (pour info si il ne vient plus ici c'est parce que il est
en "retraite" )



même adresse IP, c'est sur que tu le connais très bien :-)



Faux IP different



et pour ton info sur sa retraite, ce matin, il a posté sur une liste
pour faire un acte de candidature ;-)



quel liste ?


bien tenté mais tu ne trompes personne
Avatar
zebul0n
Bonjour,

SQL ne saurait inventé des donnés qui n'existe pas dans votre système
d'information. Or à la base ces dates n'existent probablement pas dans
votre SI.



Effectivement. J'espérais juste qu'il eut été possible d'effectuer une
requête du genre : "Sélectionner les valeurs pour les mois 1 à 12 de
l'année X, pour chaque mois manquant entre 1 et 12, affecter au mois
manquant la valeur 0". (Ceci avec les tables que j'ai crée)

Il y a là à l'évidence un défaut de votre modèle de données.



Certainement ! Je suis parti sur un postulat faux, à savoir que ce genre
de requête était possible. C'est ma faute, en espérant que ces erreurs
m'aideront à progresser.

Lisez l'article que j'ai écrit sur le sujet :
http://sqlpro.developpez.com/cours/gestiontemps/



J'ai lu votre article avec intérêt.
Cependant, ce qui vous parait simple me semble tellement compliqué.
Je vais finalement compléter les mois manquant avec PHP, le résultat
escompté sera le même sans avoir besoin de modifier mon modèle de données.
Ce sera du travail en plus pour le serveur ... :(

Merci pour votre réponse.

@+
1 2