|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2005 Messages : 16 ![]() |
Bonjour à tous,
Désolé si le titre n'est pas très évocateur mais je voudrais savoir comment procéder pour requêter 2 fois sur le même champ mais avec 2 conditions différentes (where clause). Je m'explique, je souhaite comptabiliser un champ (smallint(5)unsigned pouvant être NULL) pour toute mes données, puis recomptabiliser le même champ mais que pour ceux étant différent de 0 (pour les NULL ?). Le but, afin de faire un pourcentage (pour mes données la prévalence). Le tout dans une seule requête devant être générée sur une page php Sans oublier que les COUNT(champ) se trouve sur une autre table par rapport au champ auquel je fais un GROUP BY. Voici mon essais qui me renvoie une seule ligne (donc le GROUP BY ne marche pas avec mes sous requête, mais qu'en je les enlève c'est ok). Code :
table : porteur --> moustique --> midgut (ayant le champ d'intérêt) |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() |
J'ai reformaté ta requête pour la lisibilité :
Code :
![]() 1) Toutes les colonnes du SELECT ne faisant pas l'objet d'une fonction de regroupement doivent se trouver dans le GROUP BY sinon celles qui manquent afficheront des valeurs aléatoires ! Ceci s'applique à la requête principale et aux sous-requêtes ! 2) Pas besoin d'apostrophes autour des valeurs numériques ! Quant à ton besoin, il est incompréhensible ! ![]() Quand des NULL t'embêtent dans un comptage ou un affichage, utilise COALESCE. Si tu veux compter une colonne selon plusieurs critères, utilise SUM et CASE plutôt que COUNT, comme je l'ai expliqué par exemple dans ce message. Reviens avec un besoin clair, une description complète des tables à utiliser, un petit jeu de données et le résultat attendu, ce sera plus facile de t'aider.
__________________
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 ! |
||
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2005 Messages : 16 ![]() |
bonjour et merci pour ta réponse,
plus généralement mon besoin c'est de retirer des valeurs sur un même champ. par exemple, si le champ contient des valeurs comprises entre 0 et 10, j'aimerais retirer le nombre des données présentant le chiffre 0, idem pour 1, 2 ... voir ceux étant >5 et puis faire des choses comme pourcentage avec les valeurs obtenues ... pour CASE je vais voir de suite ce que c'est pour le GROUP BY, je souhaite dans ma requete, n'obtenir que le même nombre de ligne qu'il y a de porteur, en revenant sur ma requête foireuse, qu'en je teste sur mes données (2 porteurs) cela me renvoie 1 porteur (donc 1 ligne), et les COUNT sont générés sur les données des 2 porteurs confondus (du moins il semble car valeurs correspondes). ex mes données : porteur / moustique / chargeoocystique (nb) 001 / id1 / 25 001 / id2 / 15 001 / id3 / 0 001 / id4 / 21 002 / id5 / 26 souhaite recevoir avec la requete : pour le porteur 001 il y a 3 non nul et 1 nul sur 4 au total pour le porteur 002 il y a 1 non nul et 0 nul sur 1 au total ce que je recois avec la requete bacale : pour le porteur 001 il y a 4 non nul et 1 nul sur 5 au total edit : par non nul je veux dire différent à 0 |
|
|
00
|
|
|
#4 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2005 Messages : 16 ![]() |
rebonjour,
j'ai fait comme dans l'exemple que tu m'as passé (SUM et CASE) c'est plutôt simple a comprendre, toutefois j'ai l'erreur 'FUNCTION nombase.SUM does not exist' sinon le nouveau code (garde count pour nbtotal car sans condition) Code :
Pour pourcentage : Code :
|
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com