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 :

Dupliquer des données avec une moyenne


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Par défaut Dupliquer des données avec une moyenne
    Bonjour à tous,

    je débute vraiment en SQL et j'ai une requête à écrire dont je n'arrive pas à venir à bout

    Je dois extraire des données d'une table (avec des connexions vers d'autres tables) + faire une moyenne d'une de ces données et afficher le résultats de la moyenne dans une colonne x fois.

    Avec l'exemple ça ira mieux:

    D'une table Appels je dois extraire le nom du site appelant (via une connexion avec une autre table Site), la durée de chaque appel, l'heure de début et de fin de chaque appel ainsi que calculer la moyenne des appels pour chaque site et l'afficher dans les résultats pour chaque ligne du site concerné et c'est bien là toute la difficultée. Il me faudrait en gros l'opposé du group by car je veux reproduire x fois le résultat de ma moyenne dans une colonne.

    J'ai essayé des select récursif etc.. sans succès.

    Voici la forme de ma requête la plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT site.libelle, appels.datedebut, appels.datefin, appels.duree, avg(appels.duree)
    FROM site, appels
    INNER JOIN site ON site.n=appels.rsite
    Merci pour votre aide

  2. #2
    Membre Expert 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 : 38
    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
    Par défaut
    Bonjour,

    Déjà ta requête est fausse au niveau des jointures !! Et puis prend l'habitude de mettre ta structure des tables et ton SGBD.

    Cette requête renvoie les datedebut, datefin et duree par site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT libelle, datedebut, datefin, duree
    FROM appels
      JOIN site 
        ON n = rsite
    Cette requête renvoie la moyenne par site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT libelle, avg(duree)
    FROM appels
      JOIN site 
        ON n = rsite
    GROUP BY libelle
    A partir de là tu fais une jointure entre les tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT site.libelle, datedebut, datefin, duree, moyenne
    FROM appels
      JOIN site 
        ON n = rsite
      JOIN (SELECT libelle, avg(duree) moyenne
              FROM appels
                JOIN site 
                  ON n = rsite
              GROUP BY libelle) t
        ON t.libelle = site.libelle

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Par défaut
    Merci lola06 pour ces précisions précieuses
    Malheureusement pour le moment cette requête ne m'affiche pas la colonne moyenne mais cela m'a mis sur la bonne voie je vais maintenant pouvoir chercher pourquoi. J'avais essayé de faire des jointures de résultats de select comme tu m'as montré mais sans réel succès au moins là j'ai un exemple.

    Mission: afficher cette moyenne!!

    Merci encore

  4. #4
    Membre Expert 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 : 38
    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
    Par défaut
    Que ce passe-t-il lorsque tu exécute cette requête ?
    Tu as une erreur ? Pas de résultats ? ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT libelle, avg(duree) FROM appels JOIN site ON n = rsite GROUP BY libelle

    Quels sont les types de tes colonnes ?

  5. #5
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Selon le SGBD on peut faire du fenêtrage pour l'aggrégation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT libelle, datedebut, datefin, duree,
               avg(appels.duree) over (partition by appels.rsite)
    FROM appels
      JOIN site 
        ON n = rsite
    Je fais l'aggrégation par l'identifiant, ça me semble plus propre que de le faire sur un libellé (sans compter que 2 sites pourraient avoir le même libellé).

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Par défaut
    Merci Rei Ichido ta solution fonctionne.
    lola06, quand j'exécute ta requête j'obtenais tous les résultats souhaités sans erreur sauf la colonne contenant la moyenne qui n'apparait pas.

    Je vais prendre un moment pour analyser les choses et je vous donne un feedback ensuite.

    Merci encore à tous les 2 pour vos réponses rapides!
    Je note en résolu en attendant.

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

Discussions similaires

  1. afficher des donnée avec une page JSP
    Par alfred5 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 02/04/2011, 16h56
  2. envoyer des données avec une dll
    Par sdecorme dans le forum C
    Réponses: 21
    Dernier message: 11/03/2009, 09h10
  3. Ajout des données avec une condition
    Par jean sami dans le forum SQL
    Réponses: 2
    Dernier message: 15/09/2008, 06h21
  4. Synchronisation des données avec une base MaxDB
    Par nicoda dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 15/03/2008, 10h53
  5. [format des données avec une procédure stockée]
    Par viny dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 10/03/2005, 13h24

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