IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Count(*)/Group by sur une seule valeur


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 16
    Points : 11
    Points
    11
    Par défaut Count(*)/Group by sur une seule valeur
    Bonjour,

    je souhaite faire un count(*)/group by mais uniquement sur une seule valeur.

    Je m'explique :
    J'ai par exemple une table avec 2 colonnes (Nom, prénom).
    J'aimerais savoir le nombre de personne portant le nom "Dupond", et toutes celles ne portant pas le nom "Dupond".

    Je peux donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select count(*) 
    from matable 
    where nom = 'Dupond' 
    union 
    (select count(*) 
    from matable 
    where nom <> 'Dupond');
    Mais existe-t-il une requête permettant de faire ceci en une seule fois ?

    Merci d'avance pour vos réponses

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Avec un simple case :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT count(case when Nom =  'Dupond' then 1 end) as nb_dupond,
           count(case when Nom <> 'Dupond' then 1 end) as nb_not_dupond
      FROM MaTable

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Waldar j'aurais dit qu'il fallait mettre un sum à la place d'un count.
    Et j'aurais mis un else aussi, mais là je suis moins sure qu'il soit utile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT sum(case when Nom =  'Dupond' then 1 else 0 end) AS nb_dupond,
           sum(case when Nom <> 'Dupond' then 1 else 0 end ) AS nb_not_dupond
      FROM MaTable
    En revanche je ne suis pas sure que ce soit plus performant que la première requête surtout si nom est indexé.
    a+
    Soazig

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Si tu veux un résultat du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Nom 	 Nbre_de_Nom 	NombredeNomDifferents
    Dupont	 15		85
    Durand	 25		75
    Duchemin 30		70
    Alors il te suffit de compter séparément tous les noms et de faire une soustraction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select Nom, count(*) Nbre_de_Nom,nbre_total -count(*) AS NombredeNomDifferents
    from matable
    cross join (select count(*) as nbre_total from matable) T
    Si Nom est nullable il faudra que tu te demandes si tu le veux dans le nombre total ou pas.
    Soazig

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. group by sur une seule ligne
    Par roland34 dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/01/2012, 16h03
  2. Réponses: 3
    Dernier message: 19/09/2010, 13h09
  3. [AC-2007] Requête UNION : récuperer les valeurs sur une seule ligne
    Par tibofo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/12/2009, 12h02
  4. Récupérer une seule valeur / GROUP BY
    Par SebastienM dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/05/2009, 09h24
  5. plusieurs COUNT sur une seule table avec conditions différentes
    Par dingoth dans le forum Administration
    Réponses: 9
    Dernier message: 20/12/2006, 10h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo