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

SQL Oracle Discussion :

Utilisation de group by


Sujet :

SQL Oracle

  1. #1
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut Utilisation de group by
    Bonjours je suis debutant dans le sql et j'ai un probleme que je ne comprend pas.

    Sois la Relation:
    Relation(nom,lieu,age)

    je souhaite afficher les nom par lieu

    cette expression:
    SELECT lieu,nom FROM Relation GROUP BY lieu;

    me renvoie ORA-00979: not a GROUP BY expression et je ne comprend pas prq

  2. #2
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    En SQL tu ne peut pas utiliser dans le SELECT des champs qui ne sont pas dans le GROUP BY.
    Par contre je ne comprend pas ce que tu veux dire par
    je souhaite afficher les nom par lieu

  3. #3
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,

    On utilise le group by avec les fonction aggregation ( sum, count.....)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Note that :
    Group Functions Syntax
     
    SELECT [column,] group_function(column), ...
    FROM table
    [WHERE condition]
    [GROUP BY column* ]
    [ORDER BY column];
    *all the columns that appear in the "select clause" et that are not included in 
    a group function must appear in the "group by clause".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    SQL> select lieu,count(*)
      2  from t
      3  group by lieu;
     
    LIEU                             COUNT(*)
    ------------------------------ ----------
    MONTREAL                                3
    QUEBEC                                  2
     
    SQL>
    On peut le faire avec sql plus
    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
    25
    26
    27
     
    SQL> select * from t order by lieu;
     
    NOM                            LIEU                                  AGE
    ------------------------------ ------------------------------ ----------
    SALIM                          MONTREAL                               20
    MOUNIR                         MONTREAL                               20
    JEAN                           MONTREAL                               25
    ROBERT                         QUEBEC                                 30
    RICHARD                        QUEBEC                                 27
     
    SQL> BREAK ON LIEU;
    SQL>  SELECT LIEU,NOM,AGE 
      2   FROM T
      3   ORDER BY LIEU,NOM;
     
    LIEU                           NOM                                   AGE
    ------------------------------ ------------------------------ ----------
    MONTREAL                       JEAN                                   25
                                   MOUNIR                                 20
                                   SALIM                                  20
    QUEBEC                         RICHARD                                27
                                   ROBERT                                 30
     
    SQL>  CLEAR BREAK;
    breaks cleared
    SQL>
    On peut le faire aussi avec sql ( quand c'est impossible d'utiliser sqlplus)
    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
    25
    26
    27
    28
    29
     
    SQL> select * from t order by lieu;
     
    NOM                            LIEU                                  AGE
    ------------------------------ ------------------------------ ----------
    SALIM                          MONTREAL                               20
    MOUNIR                         MONTREAL                               20
    JEAN                           MONTREAL                               25
    ROBERT                         QUEBEC                                 30
    RICHARD                        QUEBEC                                 27
     
    SQL> with region as
      2  (SELECT lieu,nom,age, row_number()over(partition by lieu order by nom asc) rn
      3  from t)
      4  SELECT case  when rn!=1 then
      5                      null
      6     else lieu
      7      end  lieu_grp
      8     ,nom ,age FROM region order by  lieu,rn;
     
    LIEU_GRP                       NOM                                   AGE
    ------------------------------ ------------------------------ ----------
    MONTREAL                       JEAN                                   25
                                   MOUNIR                                 20
                                   SALIM                                  20
    QUEBEC                         RICHARD                                27
                                   ROBERT                                 30
     
    SQL>

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Je reprends la réponse d'Antoun du forum Langage SQL :

    Citation Envoyé par Antoun Voir le message
    Je pense que tu confonds GROUP BY et ORDER BY. GROUP BY n'a de sens que si tu utilises une fonction d'agrégation (COUNT, SUM, etc.).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Par défaut
    Si je comprends ce que tu veux dire, tu veux grouper afficher en un select, tous les lieu et les noms des personnes qui y sont attaché, mais en affichant les lieu ensemble.

    J'aurais donc tendance à dire que ce que tu cherches c'est plutot un order by :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT lieu,nom 
    FROM Relation 
    ORDER BY lieu;

Discussions similaires

  1. Utilisation du group by
    Par CoeurDeSQL dans le forum SQL
    Réponses: 7
    Dernier message: 15/04/2008, 14h06
  2. Réponses: 5
    Dernier message: 11/04/2007, 13h02
  3. [MySQL 5.0] RAND() inefficace quand utilisation de GROUP BY
    Par Takusen dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/11/2006, 15h39
  4. [XSD] Utilisation de groupes de balises xhtml
    Par Kehel dans le forum Valider
    Réponses: 7
    Dernier message: 30/01/2004, 09h55

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