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

Mögliche Duplikate:
GROUP BY / aggregate function 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 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 

URSPRÜNGLICHE 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. Alles, was ich tun möchte, ist, sich den Tischen anzuschließen und dann alle Mitarbeiter an einem bestimmten Ort zusammen zu gruppieren.

Ich glaube, ich habe eine teilweise Erklärung für meine eigene Frage. Sag mir, ob es ok ist –

Um alle Mitarbeiter, die an der gleichen Stelle arbeiten, zu gruppieren, müssen wir zuerst die LocationID erwähnen.

Dann können wir hier nicht jede Mitarbeiter-ID erwähnen. Vielmehr erwähnen wir die Gesamtzahl der Mitarbeiter an diesem Standort, dh wir sollten SUM () die Mitarbeiter an diesem Standort arbeiten. Warum machen wir das letztere, ich bin mir nicht sicher. Also, das erklärt das "es ist nicht in einer aggregierten function" Teil des Fehlers enthalten.

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

Angenommen, ich habe folgende Tabelle T :

 ab -------- 1 abc 1 def 1 ghi 2 jkl 2 mno 2 pqr 

Und ich mache folgende Abfrage:

 SELECT a, b FROM T GROUP BY a 

Der Ausgang sollte zwei Zeilen haben, eine Zeile mit a = 1 und eine zweite Zeile mit a = 2.

Aber was sollte der Wert von b auf jeder dieser beiden Reihen zeigen? Es gibt drei Möglichkeiten in jedem Fall, und nichts in der Abfrage macht deutlich, welchen Wert für b in jeder Gruppe zu wählen ist. Es ist zweideutig.

Dies zeigt die Ein-Wert-Regel , die die undefinierten Ergebnisse verbietet, die Sie erhalten, wenn Sie eine GROUP BY-Abfrage ausführen, und Sie enthalten alle Spalten in der Auswahlliste, die weder Teil der Gruppierungskriterien sind, noch in aggregierten functionen (SUM, MIN, MAX, etc.).

Es könnte so aussehen:

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

Jetzt ist klar, dass Sie das folgende Ergebnis wünschen:

 ax -------- 1 ghi 2 pqr 

Ihre Abfrage wird in MYSQL wenn Sie deaktivieren, ONLY_FULL_GROUP_BY server-Modus ( und standardmäßig ist es ). Aber in diesem Fall verwenden Sie verschiedene RDBMS. Um Ihre Abfrage zu machen, fügen Sie alle nicht aggregierten Spalten zu Ihrer GROUP BY Klausel hinzu, zB

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

Nicht-aggregierte Spalten bedeutet, dass die Spalte nicht in aggregierte functionen wie SUM , MAX , COUNT , etc COUNT .

"Alles, was ich tun möchte, ist, sich den Tischen anzuschließen und dann alle Mitarbeiter an einem bestimmten Ort zusammen zu gruppieren."

Es klingt wie das, was Sie wollen, ist für die Ausgabe der SQL-statement, um jeden Mitarbeiter in der Firma aufzulisten, aber zuerst alle Leute im Anaheim Büro, dann die Leute im Büro Büffel, dann die Leute im Cleveland Büro (A, B, C, bekomm es, offensichtlich weiß ich nicht, welche Orte du hast).

In diesem Fall verliere die GROUP BY-statement. Alles was Sie brauchen ist ORDER BY loc.LocationID

Grundsätzlich, was dieser Fehler sagt, ist, dass, wenn Sie die GROUP BY Klausel verwenden werden, dann wird Ihr Ergebnis eine Beziehung / Tabelle mit einer Zeile für jede Gruppe sein, also in Ihrer SELECT statement können Sie nur "auswählen" die Spalte, die Sie gruppieren und Aggregatfunktionen in dieser Spalte verwenden, da die anderen Spalten nicht in der resultierenden Tabelle erscheinen.