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 :

[Oracle 9i] GROUP BY avec jointure.


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Points : 4
    Points
    4
    Par défaut [Oracle 9i] GROUP BY avec jointure.
    Bonjour,

    Je veux récupérer le nombre de téléchargements par utilisateur et par année.

    Pour cela j'ai 2 tables:
    • LOG, ou sont loger certaines actions utilisateurs. Les colonnes sont:
      • LOG_UTL_ID : NUMBER // Identifiant de l'utilisateur
      • LOG_EVENT_ID : NUMBER // Code de l'évéènement. Pour un téléchagement c'est 41.
      • LOG_DATE: DATE // Date de l'évènement.
    • UTILISATEUR, contenant les infos sur les utilisateurs ...
      • UTL_ID : NUMBER
      • UTL_NOM : VARCHAR2
      • UTL_PRENOM : VARCHAR2
      • ...
    J'ai une première requete qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     SELECT
      LOG.LOG_UTL_ID                  AS userId,
      EXTRACT(YEAR FROM LOG.LOG_DATE) AS year,
      COUNT(*)                        AS count
    FROM LOG
    WHERE LOG.LOG_EVENT_ID = 41
    GROUP BY
      LOG.LOG_UTL_ID, EXTRACT(YEAR FROM LOG.LOG_DATE)
    ORDER BY
      LOG.LOG_UTL_ID, EXTRACT(YEAR FROM LOG.LOG_DATE);
    Mes problèmes se posent lorsque je veux faire apparaitre d'autres informations sur les utilisateurs : nom, prénom, etc ...

    Si je fais :
    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
     
     SELECT
      UTILISATEUR.UTL_NOM             AS userSurename,
      UTILISATEUR.UTL_PRENOM          AS userForename,
      LOG.LOG_UTL_ID                  AS userId,
      EXTRACT(YEAR FROM LOG.LOG_DATE) AS year,
      COUNT(*)                        AS count
    FROM LOG
      INNER JOIN UTILISATEUR
        ON UTILISATEUR.UTL_ID = LOG.LOG_UTL_ID
    WHERE LOG.LOG_EVENT_ID = 41
    GROUP BY
      LOG.LOG_UTL_ID, EXTRACT(YEAR FROM LOG.LOG_DATE)
    ORDER BY
      LOG.LOG_UTL_ID, EXTRACT(YEAR FROM LOG.LOG_DATE);
    J'ai l'erreur suivant: "ORA-00979 N'est pas une expression GROUP BY"

    De même en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     SELECT
      UTILISATEUR.UTL_NOM             AS userSurename,
      UTILISATEUR.UTL_PRENOM          AS userForename,
      LOG.LOG_UTL_ID                  AS userId,
      EXTRACT(YEAR FROM LOG.LOG_DATE) AS year,
      COUNT(*)                        AS count
    FROM LOG, UTILISATEUR
    WHERE LOG.LOG_EVENT_ID = 41
      AND UTILISATEUR.UTL_ID = LOG.LOG_UTL_ID
    GROUP BY
      LOG.LOG_UTL_ID, EXTRACT(YEAR FROM LOG.LOG_DATE)
    ORDER BY
      LOG.LOG_UTL_ID, EXTRACT(YEAR FROM LOG.LOG_DATE);
    Vous avez peut être la solution ?

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Ajoute userSurename et UserForeName dans ton GROUP BY

    Bon courage
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  3. #3
    Membre éclairé Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Points : 781
    Points
    781
    Par défaut
    Hello,

    déjà,dans ton GROUP BY, il faut mettre les colonnes qui ne sont pas des colonnes d'agrégat. Ensuite, je ne suis pas sûr que le EXTRACT puisse être utilisé dans un group by.

    Essaie ca :
    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
     
     SELECT
      UTILISATEUR.UTL_NOM             AS userSurename,
      UTILISATEUR.UTL_PRENOM          AS userForename,
      LOG.LOG_UTL_ID                  AS userId,
      EXTRACT(YEAR FROM LOG.LOG_DATE) AS year,
      COUNT(*)                        AS count
    FROM LOG
      INNER JOIN UTILISATEUR
        ON UTILISATEUR.UTL_ID = LOG.LOG_UTL_ID
    WHERE LOG.LOG_EVENT_ID = 41
    GROUP BY
      UTILISATEUR.UTL_NOM,UTILISATEUR.UTL_PRENOM,LOG.LOG_UTL_ID, year
    ORDER BY
      LOG.LOG_UTL_ID, year;
    Two beer or not two beer. (Shakesbeer)
    Question technique par MP => poubelle!

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci à tous les deux ...

    Il falait effectivement ajouter au GROUP BY les 2 nouvelles colonnes : UTILISATEUR.UTL_NOM et UTILISATEUR.UTL_PRENOM (je débute en SQL ... ).

    Sinon, EXTRACT semble pouvoir être utilisé dans un group by.

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

Discussions similaires

  1. Aucun groupe avec jointure externe
    Par afrodje dans le forum Langage SQL
    Réponses: 8
    Dernier message: 09/12/2008, 14h38
  2. Réponses: 1
    Dernier message: 27/11/2007, 16h43
  3. Réponses: 1
    Dernier message: 23/08/2006, 14h11
  4. Groupe By avec jointure
    Par batoubat dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/12/2005, 14h12
  5. requete avec jointure & group by
    Par de LANFRANCHI dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/07/2004, 14h31

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