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

Requêtes et SQL. Discussion :

Compter un champ WHERE COUNT(un_autre_champ)


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Par défaut Compter un champ WHERE COUNT(un_autre_champ)
    Bonjour a vous club des développeurs.

    J'aurais beson de vous pour un petit conseil pour une requete.
    Voila j'ai une table qui regroupe plusieurs champs mais seulement deux m'interresse.

    Dans cette table j'ai un champ appelé pseudo et un autre appelé personnage.
    A savoir qu'un pseudo peut avoir au maximum 5 personnages (cf exemple)

    _ma_table
    |pseudo|personnage|.....|
    |lora |Arbeo |...
    |lora |Baza |...
    |lora |Yuria |...
    |lora |Hurio |...
    |luc47 |Rindal |...
    |luc47 |Lucia |...
    |luc47 |Manalo |...
    |luc47 |Tiran |...
    |misti |Misiti |...
    |misti |Midal |...

    Et je cherche a créer cette requete :
    Je souhaite connnaitre le nombre de pseudo qui possède 4 personnages (ou 1,2,3,4 ou 5 bon la j'ai prit 4 ).

    En traduisant ca dans mon esprit SQL ca donne ceci :
    SELECT COUNT(DISTINCT pseudo) FROM _ma_table WHERE COUNT(DISTINCT personnage)

    Et j'avais pensé à un résultat du genre :
    |COUNT(DISTINCT pseudo)|
    |2 |
    La il y a bien 2 compte qui ont 4 personnages mais voila cette requete ne fonctionne pas et j'ai aucune idée comme résoudre ce problème et vous ? Avez vous une idée afin de m'aider ? Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,
    tu as la possibilité d'utiliser la clause
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING COUNT(toncritere)>3
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Par défaut
    Merci c'est super, voila j'ai créer cette requete qui fonctionne bien mais c'est pas encore ce que j'attendait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT 
    COUNT(DISTINCT pseudo), COUNT(DISTINCT personnage)
    FROM _ma_table 
    GROUP BY pseudo
    HAVING COUNT(DISTINCT personnage) <> 5
    Avec cette requete j'obtient ceci :
    |COUNT(DISTINCT pseudo)|COUNT(DISTINCT personnage)|
    |1|3| // en effet le 1e pseudo a bien 3 personnages
    |1|5| // en effet le 2e pseudo a bien 5 personnages
    |1|2|
    |1|1|
    ...

    Mais je cherchais plus quelque chose comme ceci :

    30|1| // il y a 30 pseudo qui ont 1 personnages
    |10|2| // il y a 10 pseudo qui ont 2 personnages
    |25|3|
    |120|4|
    |241|5| // il y a 241 pseudo qui ont 5 personnages

    Comment pourais-je contruire ce requete ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT 
    SUN(COUNT(DISTINCT pseudo)), COUNT(DISTINCT personnage)
    FROM _ma_table 
    GROUP BY pseudo
    HAVING COUNT(DISTINCT personnage) = 5
    Mais cette idée ne fonctionne pas trop?
    Peut-on doubler un HAVING ?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Par défaut
    Cette requête devrait t'afficher ce que tu souhaite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Count(pseudo) AS CountOfpseudo,CountOfperso
    FROM [select pseudo, Count(Table1.personnage) AS CountOfperso
    FROM Table1
    Group by pseudo]
    GROUP BY CountOfperso;
    Il ne te reste plus qu'à faire un having countOfperso = 4 si tu veux uniquement le nombre de pseudo qui ont 4 perso.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Count(pseudo) AS CountOfpseudo,CountOfperso
    FROM [select pseudo, Count(Table1.personnage) AS CountOfperso
    FROM Table1
    Group by pseudo]
    GROUP BY CountOfperso;
    Il semble avoir une erreur de syntaxe dans la ligne2 à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FROM [select pseudo, Count(Table1.personnage) AS CountOfperso
    FROM Table1
    Group by pseudo]
    Néanmoins la requete entre [] fonctionne bien, mais je ne sais pas d'ou cela bloquerais.?

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Par défaut
    Quand je la teste sur mon access, ça fonctionne correctement

    essaie peut-etre de mettre des parenthèses à la place des [] ...

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

Discussions similaires

  1. [COUNT] select ... from ... where count !
    Par tmcgrady dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/11/2007, 17h29
  2. Réponses: 4
    Dernier message: 24/03/2006, 15h08
  3. SQL : compter les champs d'une table
    Par Bboy dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/10/2005, 16h02
  4. [c#] Compter les champs d'un DataReader
    Par elendila dans le forum ASP.NET
    Réponses: 20
    Dernier message: 10/08/2005, 15h33
  5. [SQL] Compter des champs indépendement l'un de l'autre
    Par rippey dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 29/10/2003, 15h35

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