Heim  >  Fragen und Antworten  >  Hauptteil

Der Grund dafür, dass eine Spalte in der Auswahlliste nicht gültig ist, liegt darin, dass sie nicht in einer Aggregatfunktion oder GROUP BY-Klausel enthalten ist

<p>Ich habe eine Fehlermeldung erhalten - </p> <blockquote> <p>Spalte „Employee.EmpID“ ist in der Auswahlliste nicht gültig, weil sie es ist Nicht in Aggregatfunktionen oder GROUP BY-Klauseln enthalten. </p> </blockquote> <hr /> <pre class="brush:php;toolbar:false;">select loc.LocationID, emp.EmpID von Mitarbeiter als emp vollständiger Beitritt Standort als loc auf emp.LocationID = loc.LocationID Gruppieren nach loc.LocationID</pre> <p>Diese Situation entspricht der Antwort von Bill Karwin. </p> <p>Korrektur zu oben, Antwort passend für ExactaBox - </p> <pre class="brush:php;toolbar:false;">select loc.LocationID, count(emp.EmpID) – nicht count(*), möchte keine Nullen zählen von Mitarbeiter als emp vollständiger Beitritt Standort als loc auf emp.LocationID = loc.LocationID Gruppieren nach loc.LocationID</pre> <hr /> <p><strong>Ursprüngliche Frage -</strong></p> <p>Für SQL-Abfragen -</p> <pre class="brush:php;toolbar:false;">select * von Mitarbeiter als emp vollständiger Beitritt Standort als loc auf emp.LocationID = loc.LocationID gruppieren nach (loc.LocationID)</pre> <p>Ich verstehe nicht, warum dieser Fehler auftritt. Ich möchte mich nur an die Tische setzen und dann alle Mitarbeiter an einem bestimmten Standort zusammenfassen. </p> <p><strong>Ich glaube, ich habe mein Problem teilweise erklärt. Sagen Sie mir, ob Sie können -</strong> <p>Um alle am selben Standort arbeitenden Mitarbeiter zu gruppieren, müssen wir zunächst die LocationID angeben. </p> <p>Dann können/dürfen wir nicht jede Mitarbeiter-ID daneben erwähnen. Stattdessen geben wir die Gesamtzahl der Mitarbeiter am Standort an, d. h. wir sollten die an diesem Standort arbeitenden Mitarbeiter summieren(). Ich bin mir nicht sicher, warum wir den letzteren Weg gehen würden. Dies erklärt also den Teil des Fehlers „Es ist in keiner der Aggregatfunktionen enthalten“. </p> <p>Was ist die Erklärung für den falschen <strong><code>GROUP BY</code></strong>-Klauselteil? </p>
P粉517090748P粉517090748423 Tage vor617

Antworte allen(2)Ich werde antworten

  • P粉155832941

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

    如果您设置禁用 ONLY_FULL_GROUP_BY 服务器模式(默认情况下),您的查询将在 MYSQL 中运行。但在本例中,您使用的是不同的 RDBMS。因此,为了使您的查询正常工作,请将所有非聚合列添加到您的GROUP BY子句中,例如

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

    非聚合列意味着该列不会传递到聚合函数,例如 SUMMAXCOUNT 等。

    Antwort
    0
  • P粉090087228

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

    假设我有下表T

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

    我执行以下查询:

    SELECT a, b
    FROM T
    GROUP BY a

    输出应有两行,一行为 a=1,第二行为 a=2

    但是 b 的值应该在这两行中显示什么呢?每种情况都有三种可能性,查询中没有任何内容明确说明为每组中的 b 选择哪个值。意思很模糊。

    这演示了单值规则,该规则禁止在运行 GROUP BY 查询时获得未定义的结果,并且在选择列表中包含不属于分组的任何列标准,也不会出现在聚合函数(SUM、MIN、MAX 等)中。

    修复它可能如下所示:

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

    现在很明显您想要以下结果:

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

    Antwort
    0
  • StornierenAntwort