none
erreur ssms avec la fonction de moyenne (AVG) RRS feed

  • Question

  • Pourquoi lorsque j'utilise cette fonction:

    AVG

    (CAST([Table].Champ AS float)) AS moyenne_champ

    j'obtient ce message d'erreur de la part SSMS

    'champ' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause

    si j'enlève la fonction de moyenne, ma requête s'affiche correctement

    merci

     

     
    lundi 24 octobre 2011 19:06

Réponses

  • tu agrège et groupe le même attribut "Table2.Champ2 " !?!.
    Omar MERROUN Développeur .NET/Consultant Blog : http://merroun.wordpress.com/
    mardi 25 octobre 2011 13:08
  • Même question que OmarioS .... Vous essayez de calculer une moyenne d'une colonne qui appartient déjà à un regroupement .. il y a quelque chose qui ne va pas. Expliquez de façon concrète ce que vous voulez faire.

    ++


    MCDBA | MCITP SQL Server 2005 / SQL Server 2008 | LPI Linux 1
    mardi 25 octobre 2011 21:26
    Modérateur
  • Pour calculer votre moyenne il faudra lui indiquer sur quel critère d'aggrégat le faire. Prenons un exemple simple. Vous voulez calculer une moyenne de note obtenu dans un cours. Ce dernier sera votre critère d'aggrégation. Vous aurez quelque chose du genre (AVG(note) ... GROUP BY cours). Maintenant vous voulez calculer une moyenne de notes pour chaque elève pour un cours donné. Votre critère d'aggrégation sera [COURS, ELEVE]. Vous aurez alors (AVG(note) ... GROUP BY Cours, Eleve).

     

    ++ 


    MCDBA | MCITP SQL Server 2005 / SQL Server 2008 | LPI Linux 1
    mercredi 26 octobre 2011 17:18
    Modérateur

Toutes les réponses

  • Bonsoir,

    On peut avoir la requête entière ?

    Merci


    MCDBA | MCITP SQL Server 2005 / SQL Server 2008 | LPI Linux 1
    lundi 24 octobre 2011 19:17
    Modérateur
  • je te colle ici un exemple car ma table comporte beaucoup de champ dans la table1 et la table2, lorsque j'inscris ce code:

    SELECT DISTINCT Table1.Champ1, Table2.Champ2, AVG(CAST(Table2.Champ2 AS float)) AS moyenne_Champ2 FROM Table1 INNER JOIN Table2 ON Table1.Champ1 = Table2.Champ2
    GROUP BY Table1.Champ1, Table2.Champ2
    

    ca fonctionne. 

    J'ai beaucoup de champ dans mes deux tables, dois-je voir à joindre tout les champs dont j'ai besoin dans le group by comme dans ce que je viens de coller?

    si j'enlève Table2.Champ2 dans le group by, j'obtient l'erreur que j'ai mentionné plus haut

    je ne comprend probablement pas quelle est le rapport entre la fonction AVG et group by

    lundi 24 octobre 2011 19:35
  • tu agrège et groupe le même attribut "Table2.Champ2 " !?!.
    Omar MERROUN Développeur .NET/Consultant Blog : http://merroun.wordpress.com/
    mardi 25 octobre 2011 13:08
  • Même question que OmarioS .... Vous essayez de calculer une moyenne d'une colonne qui appartient déjà à un regroupement .. il y a quelque chose qui ne va pas. Expliquez de façon concrète ce que vous voulez faire.

    ++


    MCDBA | MCITP SQL Server 2005 / SQL Server 2008 | LPI Linux 1
    mardi 25 octobre 2011 21:26
    Modérateur
  • tant qu'a moi je n'utiliserais pas la fonction de groupe, mais je pense que je suis obligé de l'utiliser, puisque j'utilise la fonction AVG, c'est ce que j'ai conclu, j'ai bien écris plus haut que je ne comprennais peut-être pas l'utilité de la fonction de GROUP BY, surtout en rapport avec la fonction AVG

    ce que je veux est simplement d'afficher une table1 avec comme résultat dans chaque rangée (enregistrement) une colonne qui va afficher la moyenne d'une colonne d'une autre table2.

    il est clair que dans mes deux tables, j'ai beaucoup de champ que je n'ai pas tout coller ici, j'espère que je n'ai pas besoin de tout regrouper chaque champ de ma première table comme j'ai du faire avec la requête que j'ai écris plus haut, ce serais vraiment long avec une longue requête, je comprend pas pourquoi je doit tout regrouper pour simplement avoir une moyenne d'une colonne d'une autre table

    merci

    mercredi 26 octobre 2011 08:34
  • Pour calculer votre moyenne il faudra lui indiquer sur quel critère d'aggrégat le faire. Prenons un exemple simple. Vous voulez calculer une moyenne de note obtenu dans un cours. Ce dernier sera votre critère d'aggrégation. Vous aurez quelque chose du genre (AVG(note) ... GROUP BY cours). Maintenant vous voulez calculer une moyenne de notes pour chaque elève pour un cours donné. Votre critère d'aggrégation sera [COURS, ELEVE]. Vous aurez alors (AVG(note) ... GROUP BY Cours, Eleve).

     

    ++ 


    MCDBA | MCITP SQL Server 2005 / SQL Server 2008 | LPI Linux 1
    mercredi 26 octobre 2011 17:18
    Modérateur