Soucis avec mon GROUP BY [Résolu]

Signaler
Messages postés
993
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
9 avril 2020
-
Messages postés
993
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
9 avril 2020
-
Bonjour à tous !

Pouvez-vous m'aider à grouper les éléments ci-dessous svp ?
J'y arrive pas même quand je met tout les éléments dans le GROUP BY
Je voudrais grouper
libelle_fr + Contenance_FR
la somme de la Quantite, du Prix_Unitaire, du Prix_Total et d Total
SELECT
F.Reference
, F.Libelle_TAG
, SUM(F.Quantite)
, SUM(F.Prix_Unitaire)
, SUM(F.Prix_Total)
, F.Remise
, SUM(F.Total)

, R.Reference
, R.Coupon
, R.Etat_Commande

, P.Libelle_FR
, P.Libelle_TAG
, P.Contenance_FR

FROM tb_shop_FA F

INNER JOIN tb_shop_recap R ON R.Reference = F.Reference
LEFT JOIN tb_produits P ON P.Libelle_TAG = F.Libelle_TAG

WHERE
R.Coupon <> '0'
AND R.Etat_Commande = 'PRÉPARATION'

GROUP BY


Merci de votre aide.

Configuration: Windows / Chrome 79.0.3945.130

5 réponses

Messages postés
29058
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
1 juillet 2020
6 470
Bonjour,

Avec un group by, tu ne peux retrouver dans le select que les champs du group by + les champs SUM()

Cdlt
Messages postés
29058
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
1 juillet 2020
6 470
correction, avec mysql c'est possible, mais la valeur renvoyée c'est n'importe quoi pour les champs en dehors du group by

avec oracle c'est impossible

A lire : https://cedric-duprez.developpez.com/tutoriels/mysql/demythifier-group-by/
Messages postés
993
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
9 avril 2020
15
J'ai essayé et voilà le résultat avec :
GROUP BY 

F.Reference
, F.Libelle_TAG
, F.Quantite
, F.Prix_Unitaire
, F.Prix_Total
, F.Remise
, F.Total

, R.Reference
, R.Coupon
, R.Etat_Commande

, P.Libelle_FR
, P.Libelle_TAG
, P.Contenance_FR



Et le résultat avec :
	F.Reference
, F.Libelle_TAG
, SUM(F.Quantite)
, SUM(F.Prix_Unitaire)
, SUM(F.Prix_Total)
, F.Remise
, SUM(F.Total)

, R.Reference
, R.Coupon
, R.Etat_Commande

, P.Libelle_FR
, P.Libelle_TAG
, P.Contenance_FR

SQLSTATE[42000]: Syntax error or access violation: 1056 Can't group on 'SUM(F.Quantite)'
Messages postés
29058
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
1 juillet 2020
6 470
dans le group by il ne doit pas y avoir les champs sur lesquels tu fais les sum() , on groupe sur les autres
Messages postés
993
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
9 avril 2020
15
Donc première option, erreur sur la récupération des données...

GROUP BY

F.Reference
, F.Libelle_TAG
, F.Quantite
, F.Prix_Unitaire
, F.Prix_Total
, F.Remise
, F.Total

, R.Reference
, R.Coupon
, R.Etat_Commande

, P.Libelle_FR
, P.Libelle_TAG
, P.Contenance_FR



Messages postés
29058
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
1 juillet 2020
6 470
GROUP BY

  F.Reference
, F.Libelle_TAG
, F.Remise

, R.Reference
, R.Coupon
, R.Etat_Commande

, P.Libelle_FR
, P.Libelle_TAG
, P.Contenance_FR


par ailleurs, fonctionnellement parlant, on peut avoir des doutes sur la légitimité d'un SUM(F.Prix_Unitaire)
Messages postés
993
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
9 avril 2020
15
En effet, tu as raison pour le Prix_Unitaire.

J'ai essayé ceci et j'ai toujours des erreurs, peut-être du php...
Voici l'intégralité de mon code :
<tbody style="border:1px solid #000000;">
<?php try {$stat = $pdo->query("
SELECT
F.Reference
, F.Libelle_TAG
, SUM(F.Quantite)
, F.Prix_Unitaire
, SUM(F.Prix_Total)
, F.Remise
, SUM(F.Total)

, R.Reference
, R.Coupon
, R.Etat_Commande

, P.Libelle_FR
, P.Libelle_TAG
, P.Contenance_FR

FROM tb_shop_FA F

INNER JOIN tb_shop_recap R ON R.Reference = F.Reference
LEFT JOIN tb_produits P ON P.Libelle_TAG = F.Libelle_TAG

WHERE
R.Coupon <> '0'
AND R.Etat_Commande = 'PRÉPARATION'

GROUP BY

F.Reference
, F.Libelle_TAG
, F.Remise
, F.Prix_Unitaire

, R.Reference
, R.Coupon
, R.Etat_Commande

, P.Libelle_FR
, P.Libelle_TAG
, P.Contenance_FR

ORDER BY P.Libelle_FR
");

while($data = $stat->fetch(PDO::FETCH_ASSOC)){
?>

<tr>
<td><?php echo $data["Libelle_FR"]." - ".$data["Contenance_FR"]; ?></td>
<td><?php echo $data["Quantite"]; ?></td>
<td><?php echo number_format($data["Prix_Unitaire"], 2, ',', ' '); ?></td>
<td><?php echo number_format($data["Prix_Total"], 2, ',', ' '); ?></td>
<td><?php echo "-".$data["Remise"]."%"; ?></td>
<td><?php echo number_format($data["Total"], 2, ',', ' '); ?></td>
</tr>

<?php }}catch(PDOException $e){echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";} ?>

</tbody>


Et les erreurs rencontrés :
Alcool éthylique 90° - Flacon spray de 250ml	
Notice: Undefined index: Quantite in /home/sivop/www/test-menu.php on line 97
609,17
Notice: Undefined index: Prix_Total in /home/sivop/www/test-menu.php on line 99
0,00 -15%
Notice: Undefined index: Total in /home/sivop/www/test-menu.php on line 101
0,00
Messages postés
29058
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
1 juillet 2020
6 470
En cas de soucis, tu devrais toujours séparer php et mysql. Et donc tester la requete sql seule dans l'admin mysql.

Je ne fais pas de php, mais si on croit le message c'est un problème d'initialisation des variables du tableau php : https://www.commentcamarche.net/faq/1391-php-notice-undefined-index
Messages postés
993
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
9 avril 2020
15 >
Messages postés
29058
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
1 juillet 2020

Malheureusement ça me renvoie A et B

<?php
$Quantite = !empty($_POST['Quantite']) ? $_POST['Quantite'] : "A";
$Prix_Total = !empty($data['Prix_Total']) ? $data['Prix_Total'] : "B";
?>

Je suis perdu :'(
Messages postés
29058
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
1 juillet 2020
6 470 >
Messages postés
993
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
9 avril 2020

le soucis c'est probablement le nom la colonne qui est
SUM(F.Quantite)


il faudrait la renommer dans le select SUM(F.Quantite) AS Quantite, pareil pour les 2 autres
Messages postés
993
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
9 avril 2020
15 >
Messages postés
29058
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
1 juillet 2020

Oui tu as bien vu ! en effet !


Reste plus qu'à grouper malgré le groupage... le groupage ne fonctionne pas :\
C'est peut-être dû la F.Reference, R.Reference ? Ils ne sont pas identiques dans tout les cas et ne peuvent être groupés je penses... ?
Messages postés
29058
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
1 juillet 2020
6 470 >
Messages postés
993
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
9 avril 2020

tu ne devrais avoir en select et group by que les champs affichés dans ton resultat ci-dessus, même je virerais la remise.et le PU
Messages postés
993
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
9 avril 2020
15
Ca fonctionne ENFIN !!!

Donc si je comprends bien la fonction du GROUP BY, on ne groupe QUE ce qui est identique dans mon cas présent, sinon on groupe les éléments a afficher dans le tableau
Genre ce qui est dans le SELECT doit être présent dans le GROUP BY sauf les calculs du genre SUM et COUNT... j'espère avoir bien compris !

Merci infiniment de ton aide Jee Pee !