Requetes avec Count

cs_scm Messages postés 35 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 22 mars 2011 - 9 avril 2010 à 21:16
cs_scm Messages postés 35 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 22 mars 2011 - 11 avril 2010 à 19:38
Bonjour à tous
Je suis coincé, j'ai une table contenant plusieurs champs et je souhaiterai compter le nombre d'enregistrements d'un champs mais à une condition qu'il me compte uniquement les champs contenant l'enregistrement O
Voici l'exmeple :
La table : Matable
Les champs : Qte,Lu,Ma,Me,Je,Ve
Dans les champs Lu,Ma,Me,Je,Ve contiennent uniquement une lettre O ou N
Je souhaiterai que ma requete compte uniquement si Lu,Ma,Me,Je,Ve est à O
Voici ma requete : Select Qte,Lu,Ma,Me,Je,Ve,count(Qte) as Nb group by(qte);
Et là j'ai un regroupement de tout le champs Lu par exemple donc O et N, dans le champs Lu j'ai par exemple 2 N et 4 O dans le count j'ai 6 au lieu de 4.
Je pense qu'il faut faire des case ou des if mais je ne sais pas comment faire
Merci de votre aide

8 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
10 avril 2010 à 07:57
Je ne sais pas si tu veux que tous les chaps soient à 'O' oui si au mois un le soit

Si tu veux tous les champs c'est

SELECT COUNT(*) FROM maTable
WHERE Lu = 'O'
AND Ma = 'O'
AND Me = 'O'
etc.

Et sinon c'est


SELECT COUNT(*) FROM maTable
WHERE Lu = 'O'
OR Ma = 'O'
OR Me = 'O'
etc.
0
cs_scm Messages postés 35 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 22 mars 2011
10 avril 2010 à 18:29
Merci Julien pour ta réponse, je vais faire comme tu m'as dit, j'avais déjà essayé avec les AND
c'est à dire : select * from matable count(qte) as NB Where lu='O' and Ma='O' and Me='O' and Je='O' and Ve='O' group by qte
Je n'avais pas eu le resultat attendu.
Autre solution ?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
10 avril 2010 à 18:39
Je pense qu'il faut que tu enlèves le groupe by, et que tu ne sélectionne que la somme, les autres paramètres seront forcement des 0.

Sinon, je n'ai pas bien compris ce que tu voulais séléctionner.
0
cs_scm Messages postés 35 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 22 mars 2011
10 avril 2010 à 20:43
Merci Julien pour ta disponibilité
Au fait je ne peux m'en passer de Group By, car j'ai un count et un Sum dans la requete.
Voici ce que j'attends de ma requete :
Matable
Lu,Ma,Me,Qte,Heure
Ma requete :
Select Lu,Ma,Me,Je,Count(heure) as NB,sum(Qte) as NB1 group by heure.

Les champs Lu,Ma,Me comporte que deux caractères 'O' ou 'N'
Je souhaiterai qu'il me fasse le count que des champs contenant 'O' car quand je fais ma requete comme ci-haut j'ai un resultat me comptant tout 'O' et 'N' par exemple :
Lu Ma Me Je
O N N O
O N N O
N O N O
J'aimerai que mon count me donne : Lu =2, Ma=1, Me=0, Je=3
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
11 avril 2010 à 07:50
Ha alors c'est bien différent de ce que je pensais, en fait le WHERE va exclure toutes les lignes qui n'ont pas que des O conclusion, une seule ligne selectionnee meme avec le group by

(SELECT COUNT(*) as resLu
FROM matable 
WHERE Lu='O')
UNION ALL
(SELECT COUNT(*) as resMa
FROM matable 
WHERE Ma='O')

Et ainsi de suite pour tous les jours

Ca je pense que ca devrait marcher.

Je ne sais pas quelles sont tes contraintes, mais si j'étais à ta place, je coderais putot les O/N par 0/1, ce qui présente plusieurs avantages : une base plus légère, en effet, un entier 0 ou 1 est codé sur 1 bit alors que le O/N est codé sur au moins 5 bit.

Et en plus, ca simplifie tes requêtes, dans le cas présent, tu n'aurais eu qu'à écrire

SELECT COUNT(*) - SUM(Lu),  COUNT(*) - SUM(Ma)
FROM maTable
0
cs_scm Messages postés 35 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 22 mars 2011
11 avril 2010 à 10:51
Merci encore une fois pour ta réponse
Je ne cherche pas à compter le nombre de jours, je veux compter le nombre de fois que le même horaire apparait dans un champs nommé heure mais à condition que dans les autres champs lu,Ma,Me,Je qu'il m'exclu la valeur 'N' contenu dans ces champs, en gros que la requete me regroupe et me compte uniquement si les champs : Lu,Ma,Me,Je sont à 'O'
Exemple :
Lu Ma Me Heure Qte
O N O 07:30 2
N N N 06:00 2
O O N 07:30 1
O N N 06:00 3

Je souhaiterai avoir comme resultat groupé des heures par exemple :
Lu Ma Me Heure Qte
2 0 1 07:30 3
1 0 0 06:00 5
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
11 avril 2010 à 19:05
L(instruction c'est ca; je pense, mais je ne peux pas tester de chez moi.

SELECT Count(*), Heure, SUM(Qte) as Qte 
FROM maTable
WHERE Lu='O'
GROUP BY Heure


Et ensuite, tu fais des UNION ALL pour chacun de tes jours.
0
cs_scm Messages postés 35 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 22 mars 2011
11 avril 2010 à 19:38
Ok, je vais le tester , je reviens demain en fin de matinée pour te dire si c'est ok, merci et bonne semaine
0
Rejoignez-nous