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 :

Comment faire cette requete


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 43
    Points : 42
    Points
    42
    Par défaut Comment faire cette requete
    Bonjour,

    J'ai une table se présentant comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    uid | nom   | parrain
    -----------------
    1   | titi  | 0
    2   | toto  | 1
    5   | xxx   | 2
    6   | tttt  | 2
    7   | eee   | 1
    8   | zzz   | 1
    9   | yyy   | 8
    Chaque personne de la table possède un parrain.
    Dans la colonne parrain c'est uid du parrain.
    (si parrain=0 alors il n'en a pas)

    J'aimerais récupérer le nombre de filleul pour chaque personne ce qui donnerait ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    uid  | nbfilleuls
    ---------------------
    1    | 3
    2    | 2
    5    | 0
    6    | 0
    7    | 0
    8    | 1
    9    | 0
    Je me creuse le crane, mais je ne trouve pas comment faire cette requête
    PS: le SGBD est MySQL.

    Merci d'avance pour votre aide..

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 43
    Points : 42
    Points
    42
    Par défaut
    En fait je crois que j'ai trouvé


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT parrain, count(parrain) AS total
    FROM matable
    GROUP BY parrain
    ORDER BY total DESC

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 120
    Points : 67
    Points
    67
    Par défaut
    uid: c'est l'identifiant des titi, toto, tat etc, c'est ça?
    et dans parrain, c'est l'identifiant des parrains, c'est bien ça?


    tu veux compter les noms par parrain

    je ferai donc comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT parrain, count(nom) AS total
    FROM matable
    GROUP BY parrain
    ORDER BY total DESC

  4. #4
    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 388
    Points
    18 388
    Par défaut
    Je ne suis pas complètement d'accord avec les solutions trouvées / proposées, qui ne solutionnent pas le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    WITH MyTable AS 
    (
    select 1 as uid, 'titi' as nom, 0 as parrain union all
    select 2, 'toto', 1 union all
    select 5, 'xxx', 2 union all
    select 6, 'tttt', 2 union all
    select 7, 'eee', 1 union all
    select 8, 'zzz', 1 union all
    select 9, 'yyy', 8
    )
    SELECT parrain, count(parrain) AS total
    FROM MyTable
    GROUP BY parrain
    ORDER BY total DESC
    Donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    parrain     total
    ----------- -----------
    1           3
    2           2
    8           1
    0           1
    La requête de comptage des parrain est OK, mais il faut la joindre à la table normale afin d'avoir tous les ID :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    WITH MyTable AS 
    (
    select 1 as uid, 'titi' as nom, 0 as parrain union all
    select 2, 'toto', 1 union all
    select 5, 'xxx', 2 union all
    select 6, 'tttt', 2 union all
    select 7, 'eee', 1 union all
    select 8, 'zzz', 1 union all
    select 9, 'yyy', 8
    ),
        MyParrain AS
    (
    SELECT parrain, count(parrain) as total
    FROM MyTable
    GROUP BY parrain
    )
    select
        MyTable.uid,
        coalesce(MyParrain.total, 0) as nbfilleuils
    from
        MyTable
        left outer join  MyParrain
        ON MyParrain.parrain = MyTable.uid
    order by uid asc
    Donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    uid         nbfilleuils
    ----------- -----------
    1           3
    2           2
    5           0
    6           0
    7           0
    8           1
    9           0

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

Discussions similaires

  1. comment faire cette requete SQL en delphi
    Par rafikjka dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/01/2012, 15h42
  2. Comment faire cette requete
    Par karidrou dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/02/2011, 10h02
  3. Comment faire cette requete ?
    Par winnyzeboss1 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 02/04/2010, 11h27
  4. [WD8] comment faire cette requete
    Par benga69 dans le forum WinDev
    Réponses: 2
    Dernier message: 18/08/2008, 12h39
  5. Je ne vois pas comment faire cette requete
    Par figatelliSTI dans le forum Langage SQL
    Réponses: 5
    Dernier message: 14/08/2008, 11h56

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