Maison  >  Questions et réponses  >  le corps du texte

La raison pour laquelle une colonne n'est pas valide dans la liste de sélection est qu'elle n'est pas incluse dans une fonction d'agrégation ou une clause GROUP BY.

<p>J'ai reçu une erreur - </p> <blockquote> <p>La colonne 'Employee.EmpID' n'est pas valide dans la liste de sélection car elle est Non inclus dans les fonctions d'agrégation ou les clauses GROUP BY. </p> </blockquote> <heure /> <pre class="brush:php;toolbar:false;">sélectionnez loc.LocationID, emp.EmpID de l'employé en tant qu'em jointure complète Emplacement en tant que loc sur emp.LocationID = loc.LocationID regrouper par loc.LocationID</pre> <p>Cette situation correspond à la réponse donnée par Bill Karwin. </p> <p>Correction ci-dessus, réponse adaptée à ExactaBox - </p> <pre class="brush:php;toolbar:false;">select loc.LocationID, count(emp.EmpID) -- pas count(*), je ne veux pas compter les valeurs nulles de l'employé en tant qu'em jointure complète Emplacement en tant que loc sur emp.LocationID = loc.LocationID regrouper par loc.LocationID</pre> <heure /> <p><strong>Question originale -</strong></p> <p>Pour les requêtes SQL -</p> <pre class="brush:php;toolbar:false;">sélectionner * de l'employé en tant qu'em jointure complète Emplacement en tant que loc sur emp.LocationID = loc.LocationID regrouper par (loc.LocationID)</pre> <p>Je ne comprends pas pourquoi cette erreur se produit. Tout ce que je veux faire, c'est rejoindre les tables, puis regrouper tous les employés d'un endroit spécifique. </p> <p><strong>Je pense avoir partiellement expliqué mon problème. Dites-moi si vous pouvez -</strong> <p>Pour regrouper tous les employés travaillant au même endroit, il faut d'abord mentionner le LocationID. </p> <p>Ensuite, nous ne pouvons pas/ne mentionnons pas chaque identifiant d'employé à côté. Au lieu de cela, nous mentionnons le nombre total d'employés sur le site, c'est-à-dire que nous devrions SUM() les employés travaillant sur ce site. Je ne sais pas pourquoi nous opterions pour cette dernière voie. Cela explique donc la partie "il n'est contenu dans aucune des fonctions d'agrégation" de l'erreur. </p> <p>Quelle est l'explication de la partie incorrecte de la clause <strong><code>GROUP BY</code></strong> </p>
P粉517090748P粉517090748423 Il y a quelques jours619

répondre à tous(2)je répondrai

  • P粉155832941

    P粉1558329412023-08-24 13:38:21

    Si vous définissez la désactivation dans la clause ONLY_FULL_GROUP_BY 服务器模式(默认情况下),您的查询将在 MYSQL 中运行。但在本例中,您使用的是不同的 RDBMS。因此,为了使您的查询正常工作,请将所有非聚合列添加到您的GROUP BY, par exemple

    SELECT col1, col2, SUM(col3) totalSUM
    FROM tableName
    GROUP BY col1, col2

    Une colonne non agrégée signifie que la colonne ne sera pas transmise aux fonctions d'agrégation, telles que SUMMAXCOUNT etc.

    répondre
    0
  • P粉090087228

    P粉0900872282023-08-24 10:30:14

    Supposons que j'ai le tableau suivantT :

    a   b
    --------
    1   abc
    1   def
    1   ghi
    2   jkl
    2   mno
    2   pqr

    J'exécute la requête suivante :

    SELECT a, b
    FROM T
    GROUP BY a

    La sortie doit avoir deux lignes, une pour a=1,第二行为 a=2.

    Mais que doit montrer la valeur de b dans ces deux lignes ? Il existe trois possibilités pour chaque cas, et rien dans la requête n'indique clairement quelle valeur choisir pour b dans chaque groupe. Le sens est très vague.

    Cela démontre la Règle de valeur unique qui interdit d'obtenir des résultats non définis lors de l'exécution d'une requête GROUP BY et d'inclure tout critère de colonne dans la liste de sélection qui ne fait pas partie du regroupement ni n'apparaît dans les fonctions d'agrégation (SUM, MIN, MAX, etc. .).

    La réparation pourrait ressembler à ceci :

    SELECT a, MAX(b) AS x
    FROM T
    GROUP BY a

    Maintenant, vous souhaitez évidemment le résultat suivant :

    a   x
    --------
    1   ghi
    2   pqr

    répondre
    0
  • Annulerrépondre