Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/08/2011, 12h22   #1
Futur Membre du Club
 
Homme
Développeur informatique
Inscription : mai 2005
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : mai 2005
Messages : 17
Points : 19
Points : 19
Par défaut COUNT total et COUNT "conditionnel"

Hello,

Je ne suis pas fortiche du SQL et je me pose une petite question concernant l'utilisation de COUNT dans une requete SQL.
Par exemple, soit une table qui contiendrait :
- NumSerie
- NomPiece
- PieceProduite (contient 'O' ou 'N')


Je souhaiterai faire une seule requete SQL qui me donnerai le nombre de pieces pour chaque NumSerie (ça c'est assez facile ) et le nombre de pieces produites (ou le champ PieceProduite='O')

ça donnerai quelquechose du genre :
Code :
1
2
3
4
SELECT NumSerie, COUNT(1) as NbPieces, COUNT???? as NbProduite
FROM tbl
GROUP BY NumSerie
Que mettre à la place de COUNT????

Merci d'avance pour votre aide.
MrBoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 12h44   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 532
Points : 7 532
Comme ça, tout simplement :
Code :
1
2
3
4
5
SELECT  NumSerie
    ,   COUNT(1) AS NbPieces
    ,   SUM(CASE WHEN PieceProduite = 'O' THEN 1 ELSE 0 END) AS NbProduite
FROM    tbl
GROUP BY NumSerie
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 13h02   #3
Membre régulier
 
Inscription : décembre 2008
Messages : 64
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 64
Points : 87
Points : 87
Bonjour,

Ou en SQL "passe-partout :

Code :
1
2
3
4
5
SELECT a.numSerie, COUNT(a.nompiece),
(SELECT count(b.nompiece) FROM tb1 b WHERE b.NumSerie = a.numserie AND b.PieceProduite = 'O')
FROM tb1 a
GROUP BY a.NumSerie
ORDER BY a.NumSerie;
Cordialement
semaphore1984 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 13h14   #4
Futur Membre du Club
 
Homme
Développeur informatique
Inscription : mai 2005
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : mai 2005
Messages : 17
Points : 19
Points : 19
Merci Al1_24.

Effectivement, c'est "tout simple" quand on connait l'existence du CASE...

En plus, dans mon cas, c'est encore plus simple.
Je pensais que le champ PieceProduite contiendrait 'O' ou 'N', mais en fait, il contient 0 ou 1 (en numérique).
Du coup, il suffit de faire
. Quel je fais, des fois....

Merci encore
MrBoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 13h14   #5
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
En quoi la requete de al1_24 ne serait pas du SQL passe partout ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 13h27   #6
Membre régulier
 
Inscription : décembre 2008
Messages : 64
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 64
Points : 87
Points : 87
Bonjour,

désolé, mon commentaire était peut être un peut rapide parce que au moment où j'allais valider ma réponse, j'ai vu que al1-24 avait répondu et j'ai voulu expliquer l'alternative proposée.

Disons que ma solution est simplement une autre solution, mais celle de al-24 est probablement plus performante.

Cordialement
semaphore1984 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 16h15   #7
Futur Membre du Club
 
Homme
Développeur informatique
Inscription : mai 2005
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : mai 2005
Messages : 17
Points : 19
Points : 19
En tout cas, merci de ta participation, semaphore1984

Il est toujours intéressant d'avoir plusieurs avis pour comparaison.

A bientôt
MrBoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h39.


 
 
 
 
Partenaires

Hébergement Web