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 :

GROUP BY et SUM


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut GROUP BY et SUM
    Bonjour je travaille actuellement sur une base SQL Server et rencontre
    certain problème avec les fonctions d'agrégation et de regroupement:
    ça n'agregue et ne regroupe rien du tout !! :-)

    Démonstration sur une table toute simple:

    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
     
        create table VOITURE
        (
            id int,
            marque varchar(20),
            Montant int
        )
     
        select * from voiture
     
        id |    Marque     | Montant
        -------------------------------------
        1  |  Renault     |   6600
        2  |  Peugeot    |   7300
        3  |  Lada         |     500
        4  |  Mercedes  |  10000
        6  |  Mercedes  |  12000
        7  |  Renault     |   6500
        8  |  Peugeot    |   7500
    Je lance le regroupement et cherche à obtenir la somme des montants /
    marque de voiture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select id, marque, SUM(montant)
    from voiture
    group by marque
    Et là SQL Server me retourne l'erreure suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Serveur : Msg 8120, Niveau 16, État 1, Ligne 23
    La colonne 'voiture.id n'est pas valide dans la liste de sélection
    parce qu'elle n'est pas contenue dans une fonction d'agrégation ou
    dans la clause GROUP BY.
    Je n'ai jamais compris pourquoi (si quelqu'un peux m'expliquer au
    passage je lui dit un grand merci) on doit retrouver dans la clause
    GROUP BY les champs
    contenus dans la clause SELECT ... enfin on écoute le server et on
    recommence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    select id, marque, SUM(montant)
    from voiture
    group by marque, id
     
        1  |  Renault     |   6600
        2  |  Peugeot    |   7300
        3  |  Lada         |     500
        4  |  Mercedes  |  10000
        6  |  Mercedes  |  12000
        7  |  Renault     |   6500
        8  |  Peugeot    |   7500
    Bref aucun effet ... MAX et Min ne fonctionne pas non plus.

    J'ai grand besoin d'aide ...
    En vous remerciant,

  2. #2
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    Ajoute id avec marque dans ta clause GROUP BY

    C'est mieux non ?

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Je dirais plutôt : retire Id de la sélection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT marque, SUM(montant) 
    FROM voiture 
    GROUP BY marque
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2005
    Messages : 161
    Points : 193
    Points
    193
    Par défaut
    Si tu indique l'id, c'est normal qu'il n'y est pas de regroupement. L'id est unique...

    Essaye ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select marque, SUM(montant)
    from voiture
    group by marque
    La ca devrait etre mieux

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    si je ne met pas Id ... SQL server me fait une erreur ... cf post précédent

  6. #6
    Membre actif Avatar de TheRussian
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 200
    Points : 241
    Points
    241
    Par défaut
    Bonjour,

    même en ne mettant pas ID dans le select et dans le GROUP BY ????
    Cf=> mémo de Médiat et MadCat34

  7. #7
    Expert éminent
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Points : 6 566
    Points
    6 566
    Par défaut
    +1 avec MadCat34 et Médiat

    si je ne met pas Id ... SQL server me fait une erreur ... cf post précédent
    redonne ta requête dans ID et l'erreur...

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 34
    Points : 14
    Points
    14
    Par défaut
    Oups ... ça marche j'ai compris ... je dois supprimer ID de la requete et du group By ... sinon ça ne fais que des agrégat d'une seule ligne

    Merci à tous

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2005
    Messages : 161
    Points : 193
    Points
    193
    Par défaut
    Oublie pas de clicker sur le bouton Résolu en bas de la page ^^
    Je pense que ton pb est reglé

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

Discussions similaires

  1. [AC-2007] Group By, Count, SUM je m'y perd !
    Par Rapheux dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 20/05/2011, 12h50
  2. Group by? Distinct? Sum? Limites de mysql?
    Par zizilla dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/11/2010, 19h49
  3. problème avec group by et sum
    Par -=mateo=- dans le forum Langage SQL
    Réponses: 5
    Dernier message: 29/10/2010, 11h51
  4. Comment utilisez Group By et Sum en Linq
    Par randriano dans le forum Linq
    Réponses: 14
    Dernier message: 02/06/2010, 16h37
  5. [XQUERY] Group by et Sum
    Par DonKnacki dans le forum XQUERY/SGBD
    Réponses: 1
    Dernier message: 02/06/2010, 03h06

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