[sql] Der Grund für die Spalte ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist.



Answers

Ihre Abfrage wird in MYSQL wenn Sie festlegen, ONLY_FULL_GROUP_BY Server-Modus zu deaktivieren ( und standardmäßig ist es ). In diesem Fall verwenden Sie jedoch unterschiedliche RDBMS. Fügen Sie also alle nicht aggregierten Spalten Ihrer GROUP BY Klausel hinzu, um Ihre Abfrage funktionstüchtig zu machen

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

Nicht aggregierte Spalten bedeuten, dass die Spalte nicht in aggregierte Funktionen wie SUM , MAX , COUNT usw. COUNT .

Question

Mögliche Duplikate:
GROUP BY / Aggregat Funktion Verwirrung in SQL

Ich habe einen Fehler -

Die Spalte 'Employee.EmpID' ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist.

select loc.LocationID, emp.EmpID
from Employee as emp full join Location as loc 
on emp.LocationID = loc.LocationID
group by loc.LocationID 

Diese Situation passt in die Antwort von Bill Karwin.

Korrektur für oben, passt in die Antwort von ExactaBox -

select loc.LocationID, count(emp.EmpID) -- not count(*), don't want to count nulls
from Employee as emp full join Location as loc 
on emp.LocationID = loc.LocationID
group by loc.LocationID 

ORIGINAL FRAGE -

Für die SQL-Abfrage -

select *
from Employee as emp full join Location as loc 
on emp.LocationID = loc.LocationID
group by (loc.LocationID)

Ich verstehe nicht, warum ich diesen Fehler bekomme. Ich möchte nur an den Tischen teilnehmen und alle Mitarbeiter an einem bestimmten Ort zusammen gruppieren.

Ich denke, ich habe eine teilweise Erklärung für meine eigene Frage. Sag mir, wenn es in Ordnung ist -

Um alle Mitarbeiter, die am gleichen Ort arbeiten, zu gruppieren, müssen wir zuerst die LocationID erwähnen.

Dann können wir nicht jede Mitarbeiter-ID daneben erwähnen. Vielmehr erwähnen wir die Gesamtzahl der Mitarbeiter an diesem Standort, dh wir sollten SUM () die Mitarbeiter an diesem Ort arbeiten. Warum machen wir es so, ich bin mir nicht sicher. Das erklärt also, dass "es ist nicht in einer Aggregatfunktion enthalten" Teil des Fehlers.

Was ist die Erklärung für die GROUP BY Klausel des Fehlers?




Was dieser Fehler eigentlich sagt, ist, dass wenn Sie die GROUP BY Klausel verwenden, Ihr Ergebnis eine Relation / Tabelle mit einer Zeile für jede Gruppe sein wird. In Ihrer SELECT Anweisung können Sie also nur "auswählen" Spalte, nach der Sie gruppieren, und verwenden Aggregatfunktionen für diese Spalte, da die anderen Spalten nicht in der resultierenden Tabelle angezeigt werden.






Related