functions sql group-by aggregate-functions

sql - functions - La razón de la columna no es válida en la lista de selección porque no está contenida en una función agregada o en la cláusula GROUP BY



sql group by sum (4)

Posible duplicado:
GRUPO POR / confusión de funciones agregadas en SQL

Tengo un error ...

La columna ''Employee.EmpID'' no es válida en la lista de selección porque no está contenida en una función agregada o en la cláusula 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

Esta situación encaja con la respuesta dada por Bill Karwin.

Corrección de lo anterior, cabe en respuesta por 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

PREGUNTA ORIGINAL

Para la consulta SQL -

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

No entiendo por qué me sale este error. Todo lo que quiero hacer es unir las tablas y luego agrupar a todos los empleados en una ubicación particular.

Creo que tengo una explicación parcial para mi propia pregunta. Dime si esta bien

Para agrupar a todos los empleados que trabajan en la misma ubicación, primero debemos mencionar el ID de ubicación.

Entonces, no podemos / no mencionamos cada ID de empleado al lado. Más bien, mencionamos el número total de empleados en esa ubicación, es decir, debemos SUMAR () a los empleados que trabajan en esa ubicación. ¿Por qué lo hacemos de la última manera? No estoy seguro. Por lo tanto, esto explica la parte del error "no está contenida en ninguna función agregada".

¿Cuál es la explicación de la cláusula GROUP BY que forma parte del error?


"Todo lo que quiero hacer es unir las tablas y luego agrupar a todos los empleados en una ubicación particular".

Parece que lo que quiere es que la salida de la declaración SQL enumere a todos los empleados de la empresa, pero primero a todas las personas en la oficina de Anaheim, luego a las personas en la oficina de Buffalo, luego a las personas en la oficina de Cleveland (A, B, C, entiéndelo, obviamente no sé qué ubicaciones tienes).

En ese caso, pierda la sentencia GROUP BY. Todo lo que necesitas es ORDER BY loc.LocationID


Básicamente, lo que dice este error es que si va a utilizar la cláusula GROUP BY , su resultado será una relación / tabla con una fila para cada grupo, por lo que en su declaración SELECT solo puede "seleccionar" la La columna por la que está agrupando y usa funciones agregadas en esa columna porque las otras columnas no aparecerán en la tabla resultante.


Su consulta funcionará en MYSQL si configura el modo de servidor ONLY_FULL_GROUP_BY ( y, de forma predeterminada, lo está ). Pero en este caso, está utilizando diferentes RDBMS. Para hacer que su consulta funcione, agregue todas las columnas no agregadas a su cláusula GROUP BY , por ejemplo

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

Las columnas no agregadas significan que la columna no se pasa a funciones agregadas como SUM , MAX , COUNT , etc.


Supongamos que tengo la siguiente tabla T :

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

Y hago la siguiente consulta:

SELECT a, b FROM T GROUP BY a

La salida debe tener dos filas, una fila donde a=1 y una segunda fila donde a=2 .

Pero, ¿qué debe mostrar el valor de b en cada una de estas dos filas? Hay tres posibilidades en cada caso, y nada en la consulta deja claro qué valor elegir para b en cada grupo. Es ambiguo

Esto demuestra la regla de valor único , que prohíbe los resultados no definidos que obtiene cuando ejecuta una consulta GROUP BY, e incluye cualquier columna en la lista de selección que no forma parte de los criterios de agrupación, ni aparece en funciones agregadas (SUM, MIN, MAX, etc.).

Arreglarlo podría verse así:

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

Ahora está claro que quieres el siguiente resultado:

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