Motivo per colonna non valido nell’elenco di selezione perché non è contenuto in una funzione di aggregazione o nella clausola GROUP BY

Possibile duplicato:
Confusione di GROUP BY / aggregate function in SQL

Ho un errore –

La colonna “Employee.EmpID” non è valida nell’elenco di selezione perché non è contenuta in una funzione di aggregazione o nella clausola GROUP BY.


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

Questa situazione si inserisce nella risposta data da Bill Karwin.

correzione per sopra, si adatta alla risposta di 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 

QUESTIONE ORIGINALE –

Per la query SQL –

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

Non capisco perché ottengo questo errore Tutto quello che voglio fare è unire le tabelle e quindi raggruppare tutti i dipendenti in una particolare posizione insieme.

Penso di avere una spiegazione parziale per la mia domanda. Dimmi se è ok –

Per raggruppare tutti i dipendenti che lavorano nello stesso luogo, dobbiamo prima menzionare il LocationID.

Quindi, non possiamo / non menzionare l’ID di ciascun dipendente accanto ad esso. Piuttosto, citiamo il numero totale di dipendenti in quella posizione, ovvero dovremmo SUM () i dipendenti che lavorano in quella posizione. Perché lo facciamo in questo modo, non sono sicuro. Quindi, questo spiega la parte “non contenuta in una funzione aggregata” dell’errore.

Qual è la spiegazione della clausola GROUP BY dell’errore?

Supponiamo di avere la seguente tabella T :

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

E faccio la seguente domanda:

 SELECT a, b FROM T GROUP BY a 

L’output dovrebbe avere due righe, una riga dove a=1 e una seconda riga dove a=2 .

Ma quale dovrebbe essere il valore di b su ciascuna di queste due righe? Ci sono tre possibilità in ciascun caso e nulla nella query chiarisce quale valore scegliere per b in ciascun gruppo. È ambiguo.

Ciò dimostra la regola del valore singolo , che vieta i risultati non definiti ottenuti quando si esegue una query GROUP BY e si includono eventuali colonne nell’elenco di selezione che non fanno parte né dei criteri di raggruppamento, né appaiono in funzioni aggregate (SUM, MIN, MAX, ecc.).

Risolvere il problema potrebbe essere simile a questo:

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

Ora è chiaro che vuoi il seguente risultato:

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

La tua query funzionerà in MYSQL se si imposta disabilitare la modalità server ONLY_FULL_GROUP_BY ( e per impostazione predefinita è ). Ma in questo caso, stai utilizzando diversi RDBMS. Quindi, per far funzionare la tua query, aggiungi tutte le colonne non aggregate alla tua clausola GROUP BY , ad es

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

Colonne non aggregate significa che la colonna non è passata in funzioni aggregate come SUM , MAX , COUNT , ecc.

“Tutto quello che voglio fare è unire le tabelle e quindi raggruppare tutti i dipendenti in un luogo particolare insieme.”

Sembra che quello che vuoi sia per l’output dell’istruzione SQL per elencare tutti i dipendenti dell’azienda, ma prima tutte le persone nell’ufficio di Anaheim, poi le persone nell’ufficio di Buffalo, poi le persone nell’ufficio di Cleveland (A, B, C, prendilo, ovviamente non so quali posizioni hai).

In tal caso, perdere l’istruzione GROUP BY. Tutto ciò di cui hai bisogno è ORDER BY loc.LocationID

Fondamentalmente, ciò che questo errore sta dicendo è che se si utilizzerà la clausola GROUP BY , il risultato sarà una relazione / tabella con una riga per ogni gruppo, quindi nella propria istruzione SELECT è ansible solo “selezionare” la colonna che si sta raggruppando e utilizzare le funzioni di aggregazione su quella colonna perché le altre colonne non verranno visualizzate nella tabella risultante.