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 :

Moyenne sur requête imbriquée


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 71
    Points : 57
    Points
    57
    Par défaut Moyenne sur requête imbriquée
    Bonjour,

    Je souhaiterais calculer une moyenne à partir du résultat d'une autre requête mais je n'y parviens pas. Ci après ma requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select AVG (SELECT count(idparcelle) FROM parcelles GROUP BY prise) FROM parcelles
    MA table parcelles se présente ainsi

    idparcelle prise
    AA | 4
    AB | 4
    AC | 4
    BB | 5
    Par avance merci,

  2. #2
    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,

    AVG est déjà une fonction qui calcule une moyenne, donc pourquoi faire cette sous-requete ?

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT AVG (nb_parcelle)
      from (SELECT count(idparcelle) as nb_parcelle
              FROM parcelles 
             GROUP BY prise) t

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 71
    Points : 57
    Points
    57
    Par défaut
    Merci pour vos réponses,

    j'ai essayé ta solution skuatamad mais elle ne fonctionne pas.

    Pour réaliser ma requête j'utilise msquery, j'essaie de voir si cela provient d'une syntaxe qui doit être différente.

  5. #5
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    La requête ne fonctionne pas --> cad ? Erreur ? Mauvais résultats ?

    En plus du jeu de donnée pourrais-tu nous donner les résultats attendus ? (histoire de s'assurer qu'on ai bien compris ton besoin).
    ~ Lola ~

  6. #6
    Membre averti
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Points : 375
    Points
    375
    Par défaut
    Citation Envoyé par punkoff Voir le message
    Bonjour,

    AVG est déjà une fonction qui calcule une moyenne, donc pourquoi faire cette sous-requete ?
    c'est clair !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT avg(prise)
              FROM  parcelles group by idparcelles;

  7. #7
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par punkoff Voir le message
    Bonjour,

    AVG est déjà une fonction qui calcule une moyenne, donc pourquoi faire cette sous-requete ?
    Citation Envoyé par sweetasnz Voir le message
    c'est clair !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT avg(prise)
              FROM  parcelles group by idparcelles;
    Tout simplement parce que vos requête ne correspond pas forcément à ce qu'il veut faire.

    Perso j'ai plus l'impression qu'il veut faire une moyenne des comptages des idparcelles plutôt que la moyenne de prise.

    Pourrais-tu nous donner ton besoin exact ?
    ~ Lola ~

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 71
    Points : 57
    Points
    57
    Par défaut
    Désolé de ne pas avoir été plus clair,

    En effet je souhaite bien avoir le nombre moyen de parcelle que contient une prise.

    Dans ma logique, je compte d'abord le nombre de parcelles par prise puis j'en calcul la moyenne. L'objectif est bien d'avoir un seul nombre en sortie.

    Le calcul doit Etre Somme des parcelles / Somme des prises.
    (en répondant ici, je m aperçois d une erreur dans ma réflexion)

  9. #9
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Attention somme ou nombre ?
    ~ Lola ~

  10. #10
    Membre averti
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Points : 375
    Points
    375
    Par défaut
    Citation Envoyé par renardchan Voir le message
    Désolé de ne pas avoir été plus clair,

    En effet je souhaite bien avoir le nombre moyen de parcelle que contient une prise.

    Dans ma logique, je compte d'abord le nombre de parcelles par prise puis j'en calcul la moyenne. L'objectif est bien d'avoir un seul nombre en sortie.

    Le calcul doit Etre Somme des parcelles / Somme des prises.
    (en répondant ici, je m aperçois d une erreur dans ma réflexion)
    est-ce cela que tu veux faire?
    une moyenne de prise par parcelle :
    AA 4
    AA 6
    2/10 = 0.2 prise en moyenne pour la parcelle AA
    si oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT count(idparcelles)/SUM(prise) as prise_moy_parcelle
              FROM  parcelles GROUP BY idparcelles;

  11. #11
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par sweetasnz Voir le message
    est-ce cela que tu veux faire?
    une moyenne de prise par parcelle :
    AA 4
    AA 6
    2/10 = 0.2 prise en moyenne pour la parcelle AA
    si oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT count(idparcelles)/SUM(prise) as prise_moy_parcelle
              FROM  parcelles GROUP BY idparcelles;
    Tu n'aurais pas inversé ?
    Parce la moyenne de prise par parcelle c'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SUM(prise)/count(idparcelles) as prise_moy_parcelle
              FROM  parcelles GROUP BY idparcelles;
    A savoir maintenant ce qu'il veut vraiment...
    ~ Lola ~

  12. #12
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut,

    On peut les emboiter direct

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT AVG(count(idparcelle))
    FROM parcelles 
    GROUP BY prise

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  13. #13
    Membre averti
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Points : 375
    Points
    375
    Par défaut
    effectivement, je me disais que 0.2 poisson ça fait plutot light!!!
    merci pour le correctif

  14. #14
    Membre averti
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Points : 375
    Points
    375
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT AVG(count(idparcelle))
    FROM parcelles 
    GROUP BY prise
    tu fais une moyenne sur un scalaire... et non pas sur un vecteur

    verif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE tab1( a VARCHAR(10) , b VARCHAR(10), c INT);
    INSERT INTO tab1 VALUES ('toto','tata',10);
    INSERT INTO tab1 VALUES ('toto','tata',5);
    INSERT INTO tab1 VALUES ('tutu','titi',3);
    SELECT AVG(COUNT(a)) AS prise_moy_parcelle FROM tab1 GROUP BY c;
    res : erreur de synthaxe

    tu voulais dire peut-être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT AVG(prise)
    FROM parcelles 
    GROUP BY idparcelle
    [/quote]

    bref, je crois qu'on est un peu tous fatigué cette aprem

  15. #15
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par sweetasnz
    tu fais une moyenne sur un scalaire... et non pas sur un vecteur
    Tu as mis la mauvaise colonne dans ton group by.
    Par contre j'ai un peu de mal à comprendre sa requête tout de même.

    C'est pas plutôt ça qu'il faut faire pour avoir la moyenne des prises par idpatcelles ? (en simplifié)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT idparcelle, AVG(prise)
    FROM parcelles 
    GROUP BY idparcelle
    ~ Lola ~

  16. #16
    Membre averti
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Points : 375
    Points
    375
    Par défaut
    c'est ce que je disais , la fatigue, je viens juste de corriger en meme tps que toi

  17. #17
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Citation Envoyé par sweetasnz Voir le message
    c'est ce que je disais , la fatigue, je viens juste de corriger en meme tps que toi
    Non toujours pas, dans le group by de ton exemple tu as mis a alors que si tu juxtapose avec pacmann tu devrais mettre c.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE tab1( a VARCHAR(10) , b VARCHAR(10), c INT); 
    INSERT INTO tab1 VALUES ('toto','tata',10); 
    INSERT INTO tab1 VALUES ('toto','tata',5); 
    INSERT INTO tab1 VALUES ('tutu','titi',3); 
     
    SELECT AVG(COUNT(a)) AS prise_moy_parcelle FROM tab1 GROUP BY a;
    ~ Lola ~

  18. #18
    Membre averti
    Avatar de sweetasnz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2012
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 212
    Points : 375
    Points
    375
    Par défaut
    Citation Envoyé par lola06 Voir le message
    Non toujours pas, dans le group by de ton exemple tu as mis a alors que si tu juxtapose avec pacmann tu devrais mettre c.
    oui j'avais juste corrigé la requete avec prise/parcelle...
    mais merci de ton attention, je vois que les maillse de ton filet sont plus fines que les miennes

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/08/2008, 11h44
  2. Somme sur conditions imbriquée dans une requête
    Par aleximan dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/01/2008, 18h05
  3. problème sur une requête imbriquée
    Par pbatty1 dans le forum Requêtes
    Réponses: 12
    Dernier message: 26/10/2007, 17h21
  4. problème sur requête imbriqué
    Par Dam1en dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/10/2007, 16h55
  5. mysql_fetch_assoc sur une requêtes imbriquées
    Par akara dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/06/2007, 15h32

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