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 10/02/2012, 15h24   #1
Membre régulier
 
Homme Florian Lemaire
Développeur .NET
Inscription : mars 2003
Messages : 82
Détails du profil
Informations personnelles :
Nom : Homme Florian Lemaire
Âge : 24
Localisation : Canada

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2003
Messages : 82
Points : 73
Points : 73
Par défaut Faire plusieurs Count selon critéres sur la même colonne

Bonjour,

Je bloque pour l'écriture d'une requête qui consisterait à faire plusieurs Count sur la même colonne mais avec des valeurs différentes.

Plus concrètement, voila la requête standard:

Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
 
SELECT
	month(f.modified_when) AS mois,
	day(f.modified_when) AS jour,
	count(*) AS nb_renouvellement
FROM web_formulaire AS f
	INNER JOIN web_formulaire_type AS ft ON ft.id_type = f.id_type
WHERE 
	ft.code_name = 'PROFIL.RENOUVELLEMENT' 
    AND (f.STATUS <> 'NEW' AND f.STATUS <> 'CANCELLED')
GROUP BY month(f.modified_when), day(f.modified_when)
ORDER BY  month(f.modified_when), day(f.modified_when)

En gros, cela me donne le nombre de renouvellement pour chaque jour.

Sauf que je voudrais un total détaillé comme suit:
Total quand f.status = 'COMPLETE'
Total quand f.status = 'PROCESSED'
Total quand f.status = 'ERROR'

Bien sur, que ce soit toujours indiqué par mois/jour

et là je bloque... surtout pour avoir le bon compte par mois/jour
Florian.L est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 15h28   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 659
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 659
Points : 2 662
Points : 2 662
bonjour,

au lieu d'un count faites une sum, et comptez 1 quand vous avez votre conditions (bloque case / when)
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/02/2012, 16h03   #3
Membre régulier
 
Homme Florian Lemaire
Développeur .NET
Inscription : mars 2003
Messages : 82
Détails du profil
Informations personnelles :
Nom : Homme Florian Lemaire
Âge : 24
Localisation : Canada

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2003
Messages : 82
Points : 73
Points : 73
Ca fonctionne !!

merci beaucoup

Pour info:

Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
	month(f.modified_when) AS mois,
	day(f.modified_when) AS jour,
	COUNT(*) AS nb_renouvellement,
	sum(CASE WHEN f.STATUS = 'PROCESSED' THEN 1 ELSE 0 END) AS nb_processed,
	sum(CASE WHEN f.STATUS = 'COMPLETE' THEN 1 ELSE 0 END) AS nb_complete,
	sum(CASE WHEN f.STATUS = 'ERROR' THEN 1 ELSE 0 END) AS nb_error
FROM web_formulaire AS f
	INNER JOIN web_formulaire_type AS ft ON ft.id_type = f.id_type
WHERE 
	ft.code_name = 'PROFIL.RENOUVELLEMENT' 
	AND (f.STATUS <> 'NEW' AND f.STATUS <> 'CANCELLED')
GROUP BY month(f.modified_when), day(f.modified_when)
ORDER BY  month(f.modified_when), day(f.modified_when)
Florian.L est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/02/2012, 16h22   #4
Membre actif
 
Inscription : janvier 2012
Messages : 117
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 117
Points : 173
Points : 173
Tu peux intégrer ces infos directement dans le select aussi ... en adaptant un peu la requête ci-dessous:
Code :
1
2
3
4
5
6
7
8
SELECT
	month(f.modified_when) AS mois,
	day(f.modified_when) AS jour,
	count(*) AS nb_renouvellement,
        (SELECT count(*) FROM [...] WHERE f.STATUS='COMPLETE') AS STATUS_COMPLETE,
        (SELECT count(*) FROM [...] WHERE f.STATUS='PROCESSED') AS STATUS_PROCESSED,
        (SELECT count(*) FROM [...] WHERE f.STATUS='ERROR') AS STATUS_ERROR,
FROM [...]
KookieMonster est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 10/02/2012, 16h53   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Deux remarques sur votre requête Florian :
  1. Si vos données couvrent plusieurs années, les données seront agrégées par jour / mois.
    C'est peut-être volontaire, je souhaite juste m'en assurer.
  2. Au niveau de vos statuts, au lieu d'exclure 'NEW' et 'CANCELLED', il vaut mieux inclure ceux qui sont utiles dans la requête.
    Le jour où un nouveau statut arrive, ça vous évitera de vous tirer les cheveux du pourquoi le count(*) est différent de la somme des trois !
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
non lus Hier, 18h14   #6
Invité régulier
 
Homme
Administrateur de base de données
Inscription : avril 2008
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Sénégal

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 11
Points : 6
Points : 6
Par défaut remerciement

merci bcp ça m'a bcp aidé
bayedemba 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 09h57.


 
 
 
 
Partenaires

Hébergement Web