[SQL] Problème avec un COUNT()

Problème avec un COUNT() [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 17-03-2004 à 23:35:40    

Salut à tous,
 
voilà, j'ai une table avec 4 champs :
id_action
id_objet
id_effet
id_ressource
 
J'aimerais compter le nombre d'id_effet non nuls (cad id_effet!=0) pour chaque id_objet
 
J'ai donc fait la requète suivante :
 

Code :
  1. SELECT o.id, o.objet, COUNT( rel.id_effet ) as nb
  2. FROM relations rel, objets o
  3. WHERE o.id = rel.id_objet AND rel.id_effet <>0
  4. GROUP  BY o.id,o.objet


 
la table objets contient juste le nom de l'objet et son id, donc o.id=rel.id_objet
 
Or, cette requête ne me donne un résultat que si COUNT(id_effet)!=0  
mais j'aimerais également qu'il me sorte les résultats si COUNT(id_effet)==0
 
Exemple : j'ai 216 enregistrements d'objet, et avec ma requête, il ne m'en ressort que 146, or j'aimerais qu'il m'affiche les 70 manquants avec la colonne nb égale à 0
 
Quelqu'un aurait il une petite idée ?
Merci d'avance !

Reply

Marsh Posté le 17-03-2004 à 23:35:40   

Reply

Marsh Posté le 18-03-2004 à 00:16:21    

Si je peux me permettre de rajouter une petite condition, il faudrait idéalement que les id_effet ne soient comptabilisés qu'une fois ;)
 
Si quelqu'un voit la solution...

Reply

Marsh Posté le 18-03-2004 à 07:16:53    

null n'est pas 0 :non:  
donc:
rel.id_effet is not null

Reply

Marsh Posté le 18-03-2004 à 12:27:55    

Code :
  1. SELECT o.id, o.objet, COUNT( rel.id_effet ) as nb
  2. FROM objets o LEFT JOIN relations rel ON o.id = rel.id_objet
  3. WHERE rel.id_effet IS NULL OR rel.id_effet>0
  4. GROUP  BY o.id,o.objet


Message édité par ratibus le 18-03-2004 à 12:30:06
Reply

Marsh Posté le 18-03-2004 à 12:31:59    

ratibus a écrit :

Code :
  1. SELECT o.id, o.objet, COUNT( rel.id_effet ) as nb
  2. FROM objets o LEFT JOIN relations rel ON o.id = rel.id_objet
  3. WHERE rel.id_effet <>0
  4. GROUP  BY o.id,o.objet




 
salut,
Malheureusement ça marche pas non plus, ça me fait exactement la même chose.
En fait, je pense qu'une jointure entre objets et relations est inutile, puisque il n'y a pas de relation spécifique entre ces deux tables.
 
Peut être une jointure de la table relations sur elle même ?

Reply

Marsh Posté le 18-03-2004 à 12:33:28    

thecoin a écrit :

null n'est pas 0 :non:  
donc:
rel.id_effet is not null


 
non non, justement, je n'ai pas de null dans cette colonne.
 
J'ai bien des 0, que je voudrais écarter

Reply

Marsh Posté le 18-03-2004 à 12:35:59    

Gurney_Halleck a écrit :


 
salut,
Malheureusement ça marche pas non plus, ça me fait exactement la même chose.
En fait, je pense qu'une jointure entre objets et relations est inutile, puisque il n'y a pas de relation spécifique entre ces deux tables.
 
Peut être une jointure de la table relations sur elle même ?


Tu as une jointure entre ces 2 tables qd tu fais WHERE o.id = rel.id_objet
 
J'ai édité mon code : t'as essayé ma nouvelle requête ?

Reply

Marsh Posté le 18-03-2004 à 12:39:18    

Tu peux essayer ça déjà ...
 
SELECT o.id, o.objet, COUNT( rel.id_effet ) as nb  
FROM  objets o left join relations rel  
      on o.id = rel.id_objet  
GROUP  BY o.id,o.objet

Reply

Marsh Posté le 18-03-2004 à 12:45:47    

ratibus a écrit :


Tu as une jointure entre ces 2 tables qd tu fais WHERE o.id = rel.id_objet
 
J'ai édité mon code : t'as essayé ma nouvelle requête ?


 
ouip, j'ai essayé, mais ça me retourne exactement la même chose.
 
Je reprécise : je voudrais que le COUNT ne prenne en compte que les id_effet dont la valeur n'est pas égale à 0

Reply

Marsh Posté le 18-03-2004 à 12:47:19    

vttman2 a écrit :

Tu peux essayer ça déjà ...
 
SELECT o.id, o.objet, COUNT( rel.id_effet ) as nb  
FROM  objets o left join relations rel  
      on o.id = rel.id_objet  
GROUP  BY o.id,o.objet
 


 
oui, ça ça marche, mais dans ce cas, nb=1 même quand id_effet=0
 
je voudrais que ça me retourne nb=0 quand il n'y a que des id_effet=0

Reply

Marsh Posté le 18-03-2004 à 12:47:19   

Reply

Marsh Posté le 18-03-2004 à 12:48:29    

en meême temps, je sais pas si ce que je veux est possible à faire ;)

Reply

Marsh Posté le 18-03-2004 à 13:00:43    

encore un essai :D :

Code :
  1. SELECT o.id, o.objet, COUNT( rel.id_effet ) as nb 
  2. FROM objets o LEFT JOIN relations rel ON o.id = rel.id_objet AND rel.id_effet>0 
  3. GROUP  BY o.id,o.objet


Message édité par ratibus le 18-03-2004 à 13:01:57
Reply

Marsh Posté le 18-03-2004 à 13:07:43    

:love:
 
MERCI !
Donc faut le mettre dans le ON !
Merci bcp ! Je rajoute mon DISTINCT dans COUNT et j'ai exactement ce que je veux :hello:
 
Merci encore, à tous, pour votre aide !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed