theflayer
Messages postés125Date d'inscriptiondimanche 28 février 2010StatutMembreDernière intervention21 juin 2015
-
21 févr. 2013 à 11:23
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 2016
-
23 févr. 2013 à 15:05
Bonjour tous le monde,
j'ai un soucis avec une requête, qui me renvoie l'erreur : Invalid use of group fuction
je m'explique :
Je veux faire le calcul via la fonction SUM() sur plusieurs lignes d'une table ayant un champ identique mais avec une restriction dans le WHERE,le problème est que si cette restriction n'existe pas (parce qu’elle n'est pas encore remplie) dans la ligne, elle ne me retourne rien.
Cela sera plus parlant avec la requête :
SELECT *,SUM(MONTANT_EURO) AS TOTAL FROM note n
LEFT JOIN depense d ON(n.ID_NOTE=d.ID_NOTE)
WHERE CASE WHEN COUNT(ID_DEPENSE)> 0 THEN ID_RUBRIQUE != 7 END
GROUP BY n.ID_NOTE ORDER BY n.ID_NOTE ASC
En gros si COUNT(ID_DEPENSE) me renvoie 0 c'est que la ligne n'existe pas et dans ce cas je veux que le WHERE soit vide (pour qu'il me renvoie les autres informations sans le SUM(), sinon si COUNT(ID_DEPENSE) est supérieur à 0 dans ce cas le WHERE possède la restriction ID_RUBRIQUE != 7
Voila j’espère avoir su m'expliquer.
Si vous avez une idée,
Merci d'avance.
-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
theflayer
Messages postés125Date d'inscriptiondimanche 28 février 2010StatutMembreDernière intervention21 juin 20152 21 févr. 2013 à 13:29
hum, pas terrible l'affichage .
SELECT *,SUM(MONTANT_EURO) AS TOTAL FROM note n
LEFT JOIN depense d ON(n.ID_NOTE=d.ID_NOTE)
LEFT JOIN etat e ON(n.ID_ETAT=e.ID_ETAT)
WHERE (SELECT CASE WHEN COUNT(ID_DEPENSE)> 0 THEN d.ID_RUBRIQUE != 7 ELSE 1 END)
AND ID_EMPLOYE="'.$_SESSION['ID_EMPLOYE'].'" GROUP BY n.ID_NOTE ORDER BY n.ID_NOTE ASC
-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 21 févr. 2013 à 12:38
Salut,
le CASE WHEN ne peut pas servir pour des clauses conditionnelles.
Fais une requête non sommée dans ton premier cas, unie avec une requête non sommée pour ton autre cas, puis encapsule dans une requête de somme. Il ya peut-être meilleure solution mais c'est la première qui me vient à l'esprit.
theflayer
Messages postés125Date d'inscriptiondimanche 28 février 2010StatutMembreDernière intervention21 juin 20152 21 févr. 2013 à 13:27
Salut jopop,
incroyable, dans n'importe quel langage, c'est toujours toi le premier a venir me secourir .
Alors le CASE WHEN peut servire dans les clauses conditionnelles, mais c'est vraiment très chiant.
Après 2 bonnes journées de prise de tête j'en suis arrivée a là et ça à l'air d'être fonctionnelle.
SELECT *,SUM(MONTANT_EURO) AS TOTAL FROM note n LEFT JOIN depense d ON(n.ID_NOTE=d.ID_NOTE) LEFT JOIN etat e ON(n.ID_ETAT=e.ID_ETAT) WHERE (SELECT CASE WHEN COUNT(ID_DEPENSE)> 0 THEN d.ID_RUBRIQUE != 7 ELSE 1 END) AND ID_EMPLOYE="'.$_SESSION['ID_EMPLOYE'].'" GROUP BY n.ID_NOTE ORDER BY n.ID_NOTE ASC
voila voila.
J’espère que ça pourra en aider quelqu'un.
Je met en résolu.
Merci encore Jopop.
-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 21 févr. 2013 à 13:47
J'ai t'ai répondu et c'est moi qui ai appris un truc,
comme quoi c'est donnant donnant
Par contre fait une vérif' à la main sur un jeu de données limité, perso je viens de faire un test de cette utilisation du CASE WHEN (simplifié) qui n'a pas été probant.
Vous n’avez pas trouvé la réponse que vous recherchez ?
theflayer
Messages postés125Date d'inscriptiondimanche 28 février 2010StatutMembreDernière intervention21 juin 20152 21 févr. 2013 à 14:17
Avec plaisir si pour une fois je peux servir !
Alors le CASE WHEN est rarement utilisé dans la clause apparemment,
et les différente syntaxe que j'ai trouvé sur le net, furent plus compliquées les une que les autres et ne fonctionnaient pas de surcroît.
Puis en pensant a la syntaxe de base qui est plutôt au niveau du SELECT (comme c'est montré dans la doc mysql) je me suis dit rien ne m'interdis d'essayer avec un SELECT imbriqué et la bingooooo .
Alors pour moi ça fonctionne niquel, cela m'affiche l'ensemble des données, même si la ligne n'existe pas et cela me fait le calcul sans me compter ceux qui ont un ID_RUBRIQUE=7
Donc je touche plus .
Enfin sur ce, merci encore d'être intervenu, et si je peux t'aider, je suis là .
-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas