|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre confirmé
![]() Inscription : octobre 2007 Messages : 676 ![]() |
Bonjour,
j'ai une table contenant des libellés. Chaque libellé correspond à un local (un n°) et à un id (un autre n°). Chaque libellé a également une date et un champ de type booléen. Un local peut avoir plusieurs libellés, de même qu'un id. Je souhaite récupérer le nombre de libellés ayant '0' en champ booléen pour chaque local, pour un id donné. Ce qui me donne pour le moment, cette requête : Code :
J'obtiens : Citation:
Maintenant, je souhaite toujours faire la même requête mais en comptant uniquement les id où le libellé ne commence pas par ">>". J'ai donc fait ceci : Code :
J'obtiens : Citation:
Comment puis-je faire ? Merci |
||||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Mathieu ROBINDéveloppeur Web Inscription : mai 2006 Messages : 1 116 ![]() |
Tu ne dois pas mettre ta condition dans le having, mais dans le where. Je pense, je te laisse tester pour confirmer.
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne. Le bouton ne masse pas les pieds, mais ça aide la communauté.
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 278 ![]() |
a priori non. Le WHERE jouera sur l'ensemble retourné par le GROUP BY. Il faut remplacer le FROM maTable par FROM(SELECT...WHERE) AS sousTable dans lequel tu supprimes les lignes indésirables par le WHERE. Le GROUP BY jouera ensuite sur cet ensemble retourné
Reste plus ensuite qu'à trouver une autre combine pour avoir le nombre correct dans le COUNT(id). ici, il représentera le nombre d'id dont le libellé ne contiendra pas de ">>". Si tu veux le nombre d'id contenant également ">>" (tous donc) => faudra réfléchir à nouveau |
|
|
00
|
|
|
#4 | ||
![]() ![]() |
Non !
WHERE agit sur chaque ligne. HAVING agit sur le résultat d'un regroupement GROUP BY. gwinyam a raison, il faut mettre cette condition dans le WHERE. Plusieurs autres choses à dire sur la requête. 1) Distinct est inutile puisqu'il y a déjà un GROUP BY 2) Inutile de compter les id quand il suffit de compter les lignes donc COUNT(*) est suffisant et plus performant. 3) Les valeurs textuelles s'écrivent entre apostrophes, pas entre guillemets. 4) Toutes les colonnes du SELECT ne faisant pas l'objet d'une fonction de regroupement doivent figurer dans le GROUP BY. Un autre SGBD que MySQL, qui est trop permissif avec la norme SQL, refuserait la requête. Voici la requête qui devrait convenir : Code :
__________________
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 ! |
||
|
10
|
|
|
#5 |
|
Membre confirmé
![]() Inscription : octobre 2007 Messages : 676 ![]() |
Merci bien, tout fonctionne correctement
|
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 278 ![]() |
Exact ! J'ai dis n'importe quoi
je me suis embrouillé en pensant à un autre exemple perso ou je devais faire un regroupement sur un champ en retournant le max d'un autre champ et où j'avais pas trouvé mieux à faire que de faire une sous requête filtrante avant le GROUP BY... Mea culpa |
|
|
00
|
|
|
#7 | |
|
Membre Expert
![]() ![]() Mathieu ROBINDéveloppeur Web Inscription : mai 2006 Messages : 1 116 ![]() |
Citation:
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne. Le bouton ne masse pas les pieds, mais ça aide la communauté.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com