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 :

problème de sous requête


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut problème de sous requête
    Bonsoir,
    je veux additioner les 2 COUNT des 2 requêtes suivante en une requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT nom_adherent, COUNT(E.*) AS "nb emprunt"
    FROM adherent  NATURAL JOIN emprunt E 
    GROUP BY nom_adherent;
     
    SELECT nom_adherent, COUNT(H.*) AS "nb emprunt"
    FROM adherent NATURAL JOIN histoemprunt H 
    GROUP BY nom_adherent;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT nom_adherent, COUNT(E.*)+(SELECT COUNT(H.*) 
    FROM adherent NATURAL JOIN histoemprunt H 
    GROUP BY nom_adherent)
    FROM adherent NATURAL JOIN emprunt E
    GROUP BY nom_adherent;
    mais cela ne marche pas il me dit, ERROR: more than one row returned by a subquery used as an expression.
    Comment faire?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 390
    Points
    28 390
    Par défaut
    Faute de connaître la structure de tes tables, je peux te proposer cette requête :
    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
    SELECT    nom_adherent
        ,    tb1.nb + tb2.nb AS nb_emprunt
    FROM    (    SELECT     nom_adherent
                    ,     COUNT(E.*)     AS nb
                FROM     adherent  
                    NATURAL JOIN 
                        emprunt E 
                GROUP BY nom_adherent
            )    AS tb1    
        INNER JOIN
            (    SELECT     nom_adherent
                    ,     COUNT(H.*)     AS nb
                FROM     adherent 
                    NATURAL JOIN 
                        histoemprunt H 
                GROUP BY nom_adherent
            )    As tb2
            ON    tb1.nom_adherent = tb2.nom_adherent
    ;
    Mais il y a certainement un moyen d'optimiser cela

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci j'ai compris.
    là je bloque sur autre chose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT nom_editeur
    FROM (SELECT nom_editeur,MAX(nb) FROM (SELECT nom_editeur, COUNT(L.*) as nb FROM livre L NATURAL JOIN oeuvre NATURAL JOIN editeur
    GROUP BY nom_editeur) as tb1 ) as tb2;
    je veux simplement le nom_editeur pour lequel nb est le max.

    il me dit : ERROR: column "tb1.nom_editeur" must appear in the GROUP BY clause or be used in an aggregate function

    mais si je met un GROUP BY de tb1.nom_editeur ma requête ne donnera pas ce que j'attend !

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 390
    Points
    28 390
    Par défaut
    Peux-tu indiquer la structure de tes tables ?

    Règles du forum Langage SQL à lire par tous

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    voilà

    livre(id_livre, id_oeuvre,prix)
    oeuvre(id_oeuvre,titre,id_editeur)
    editeur (id_editeur,nom_editeur)

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour quel est votre SGBD ?

    Vous pourriez utilisez les fonctions de fenêtrage pour ce faire sinon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    With tmp as (
    Select id_editeur, count(*) as nb_oeuvre, rank() over(order by count(*) desc) as rnk
    from oeuvre
    group by id_editeur)
     
    select nom_editeur, nb_oeuvre
    from tmp a
    inner join editeur b on a.id_editeur = b.id_editeur
    where rnk = 1
    Et ca gère les égalités. (faire le count sur la table livre si vous avez une relation autre que 1*1 entre oeuvre et livre)

Discussions similaires

  1. Problème de sous requête (retour d'une seule valeur)
    Par ero-sennin dans le forum Requêtes
    Réponses: 1
    Dernier message: 14/06/2006, 11h12
  2. Problème de sous-requêtes
    Par R'SKaP dans le forum Langage SQL
    Réponses: 6
    Dernier message: 24/05/2006, 19h39
  3. Problème de sous requête
    Par espadon1 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/05/2006, 15h20
  4. Problème de sous requête
    Par Draiwn dans le forum Requêtes
    Réponses: 8
    Dernier message: 16/11/2005, 01h43

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