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 :

GROUP BY et SELECT *


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Par défaut GROUP BY et SELECT *
    Bonjour à tous ,

    Est-il possible de faire un select * avec une clause group by ?

    Comme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Table1 GROUP BY Champ1
    Ou doit-on spécifier tous les champs dans le Select ?

    Cordialement.

  2. #2
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Bonjour,
    Le problème n'est pas dans le select mais dans le group by, qui va vous demander plus de colonnes, selon les données de la table.
    Pourquoi ne pas tout simplement faire un "distinct" ?

  3. #3
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Par défaut
    Si j'utilise distinct je suis obligé d'écrire tous les champs dans ma requête comme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select distinct Champ1, Champ2 ... champN
    Donc le '*' ne fonctionnera pas d'avantage non ?

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

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Qu'essaies-tu d'obtenir ?
    GROUP BY te permet de définir des groupes selon un certain critère (égalité sur champ1), afin de pouvoir appliquer des fonctions d'aggrégat sur ce groupe.
    => une seule ligne t'es retournée par valeur possible de champ1

    Si tu demandes le champ2, quelle valeur va-t-on bien pouvoir te retourner, vu que ce n'est pas la même pour toutes les lignes du groupe ?

    Si ce que tu veux, c'est obtenir les résultats d'agrégats reportés sur chaque ligne, essaie les fonction analytiques : OVER(PARTITION BY champ1)

  5. #5
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Salut !

    Qu'essaies-tu d'obtenir ?
    GROUP BY te permet de définir des groupes selon un certain critère (égalité sur champ1), afin de pouvoir appliquer des fonctions d'aggrégat sur ce groupe.
    => une seule ligne t'es retournée par valeur possible de champ1

    Si tu demandes le champ2, quelle valeur va-t-on bien pouvoir te retourner, vu que ce n'est pas la même pour toutes les lignes du groupe ?

    Si ce que tu veux, c'est obtenir les résultats d'agrégats reportés sur chaque ligne, essaie les fonction analytiques : OVER(PARTITION BY champ1)
    Oui en fait je souhaite prendre une seule ligne par doublon, peut importe la valeurs des autres champs mais il faut que j'affiche une ligne. La première par exemple.

    Je ne sais pas si j'ai été bien clair

    Par contre je ne connais pas du tout les fonctions analytiques ...

  6. #6
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    De toutes manières avec les fonctions analytiques vous allez devoir traiter chaque champ.
    Peut-être l'utilisation du rownum peut vous être utile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select Table1.* 
    from  
      (select rownum numrow, Table1.* from Table1) Table1
      inner join (SELECT min(rownum) numrow, Champ1 FROM Table1 group by Champ1) T1 on Table1.numrow = T1.numrow and Table1.Champ1 = T1.Champ1

  7. #7
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Citation Envoyé par guiph Voir le message
    Donc le '*' ne fonctionnera pas d'avantage non ?
    Sisi, ça fonctionnera.

    Attention : distinct et group by n'ont rien à voir, évitez d'utiliser un regroupement lorsque cela est inutile.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par guiph Voir le message
    Est-il possible de faire un select * avec une clause group by ?
    Par principe, ce n'est jamais une bonne idée de faire un select * et ça ne coûte pas plus cher d'écrire tous les champs, même si ça peut faire lourd.
    Une modification de ta table et ta requète peut te renvoyer des résultats bizarres.
    Et pour trouver la source de ce genre d'erreurs, c'est plutôt chronophage.

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par Jerome_Mtl Voir le message
    Par principe, ce n'est jamais une bonne idée de faire un select *
    Tout à faire d'accord, ce n'est en principe pas une bonne idée, surtout quand on fait ça par paresse

Discussions similaires

  1. Problème SELECT, CASE et Group by
    Par Royd938 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/10/2014, 07h41
  2. Petite interrogation....SELECT ... GROUP BY
    Par zevince dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 15/04/2013, 13h52
  3. selection avec group by mais ne garder que ...
    Par Larson dans le forum Langage SQL
    Réponses: 13
    Dernier message: 22/06/2005, 17h23
  4. Faire un Select v1 sans mettre v1 dans Group By
    Par faayy dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/05/2005, 09h28
  5. Selection de Groupes ki ne sont pas sous groupes...
    Par superdada dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/07/2003, 14h42

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