Problème avec SUM et INNER JOIN - SQL/NoSQL - Programmation
Marsh Posté le 26-06-2017 à 17:30:32
Si tu mets un SUM() dans ton select (j'imagine, sur le champ "montant" ), il te faut ajouter la clause GROUP BY à la fin de ta requête et d'indiquer comment tu veux sommer (quels critères de regroupement). Je te conseille d'apprendre le SQL, sans ça, tu vas perdre beaucoup de temps
Marsh Posté le 26-06-2017 à 18:50:34
j'ai décidé de me mettre au sql, pour cela j'ai suivis des tuto sur https://openclassrooms.com/
par la suite j'ai réussis a faire inner join entre 3 tables, ça ma pris du temps, j'ai réussis.
comme je ne suis pas programmeurs de métiers , par petit pas j'apprend, je m'informe, je demande de l'aide après avoir fait plusieurs recherche sur le net.
je ne savais qu'il y a besoin de GROUP BY , c'est pour faire le trie , c'est bien ça?
que veut-tu dire par comment tu veux sommer (quels critères de regroupement) ?
un exemple sera le bien venu
Marsh Posté le 27-06-2017 à 13:52:43
Pas du tout, le GROUP By, c'est pour faire des regroupements pour les agrégations mises dans le SELECT (ex : COUNT(), SUM(), MIN(), MAX()...). Pour le tri, c'est ORDER BY.
Pour les regroupements, il faut indiquer comme les faire. Ex : Voici une liste d'enregistrements
Marque Modèle Prix
Renault Clio 15000 €
Renault Clio 13500 €
Renault Modus 9000 €
Citroën C3 12000 €
Citroën C4 17000 €
Citroën C4 16000 €
Si je veux faire une requête pour faire un SUM() sur le prix, il faut bien indiquer comment je veux sommer, comment je veux faire les regroupements des lignes : sur la colonne Marque, sur la colonne Modèle, ou sur le couple Marque/Modèle. La clause GROUP BY sert à ça. Si je fait un GROUP BY Marque, Modèle, en résultat, j'aurai 4 lignes :
Renault, Clio, 28500 €
Renault, Modus, 9000 €
Citroën, C3, 12000 €
Citroën, C4, 33000 €
Si je fais un group by Marque, j'aurai que 2 lignes (Renault, Citroën et la somme par marque). Si je fais un group by Modèle, j'aurai 4 lignes (Clio, Modus, C3, C4 et la somme par modèle).
Marsh Posté le 28-06-2017 à 05:46:52
j'ai compris a quoi sert le GROUP BY, merci pour l'explication
Si je fais un GROUP BY Marque, j'ai envie de rajouter après chaque ligne la quantité existante, je dois rajouter quel fonction?
Renault, Clio, 28500 €, 2
Renault, Modus, 9000 €, 1
Citroën, C3, 12000 €, 2
Citroën, C4, 33000 €, 2
Marsh Posté le 28-06-2017 à 10:31:02
En plus du SUM(), tu rajoutes un COUNT() sur l'ID des voitures qui sont liées à un modèle (le modèle étant lié à la marque). Quand je parle de "lié", cela implique un lien via une clé étrangère (vers une clé primaire).
Marsh Posté le 30-06-2017 à 16:41:37
Bonjour,
J'ai rédigé mon query
je prends comme exemple une table de facture d'achat :
ID du client, ID numéros de catalogue, date, prix, quantité, total
j'ai fait COUNT(ID numéros de catalogue), SUM(prix),
WHERE (ID client)
GROUP BY sur 2 cologne,(ID du client,ID numéros de catalogue).
Je reçois bien le résultat:
ID du client, ID numéros de catalogue, date, prix, quantité, total
Yanick colle 3€ 2 6€
Yanick gomme 2€ 20 40€
Yanick trousse 10€ 5 50€
si j'ai envie de rajouter une ligne avec le Total comment faire j'ai pas réussi a trouver?
du genre SUM du SUM(total)
ID du client, ID numéros de catalogue, date, prix, quantité, total
Yanick colle 3€ 2 6€
Yanick gomme 2€ 20 40€
Yanick trousse 10€ 5 50€
_____________________________________________________
Total 96€
Marsh Posté le 30-06-2017 à 21:56:12
Faudra faire une autre requête pour avoir le total. Pas possible de faire en une seule. Ou alors, passer par les procédures stockées.
Si, un mix de SQL + PHP. SQL te sort le 1er résultat et pour le total, tu le fait via PHP en passant par une variable qui à la lecture de chaque enregistrement (ie chaque ligne), récupère le sous-total et l'ajoute au total des lignes précédentes.
Marsh Posté le 26-06-2017 à 07:00:06
Bonjour a tous
J'ai 3 tables
1. table client au nom customer_table
2. table action au nom operation_table
3. table de jointure data_integration_table
j'ai mis une page web avec form pour insérer les données dans la table de jointure (data_integration_table).
dans ma table de jointure, j'ai :
- l'ID de la table client
- commentaire
- l'ID de la table action
- la date
- le montant
- le total (qui sert pour SUM)
dans ma page web j'ai rajouter 4 boutons, selon le bouton cliqué.
dans ma page PHP, j'utilise switch case pour le bouton cliqué et j'affiche le résultat dans une <table>
si je lance la requête sans ajouter SUM, chaque ligne de la table s'affiche.
dès que je rajoute la fonction SUM, juste la 1ère ligne de la table s'affiche et le montant Total de toutes les lignes existante dans ma table.
mom code
Pour afficher la somme total j'ai rajouté avant le mot FORM
et dans la 2ème table pour afficher la somme total
après le changement cela vas me donner
la juste la 1ère ligne de ma table s'affiche avec le juste Total.
Comment faire pour que toutes les lignes s'affichent bien avec le Total ?