Error común en Agrupar por

Requisito previo: SQL | AGRUPAR POR

Error:
la columna ‘col’ no es válida en la lista de selección porque no está contenida ni en una función agregada ni en la cláusula GROUP BY.

Tabla de muestra emp:

Ejemplos:

Input: 
select empId, empName, empAmount from emp group by empId, empName

Output: Error 

Explicación:
empAmount no está en grupo por lista y tampoco es una función agregada, la consulta dará el error anterior. Para empId y empName hay varios empAmount, el motor de la base de datos no pudo elegir un empAmount.

Input: 
select empId, sum(empAmount) as debit from emp group by empId

Output:
empId | debit
1     | 300
2     | 400 

GROUP BY :
de los ejemplos anteriores, está claro que solo podemos tener aquellas columnas que están en el grupo por o argumentos de una función agregada en la cláusula de selección. pero eso no es completamente cierto.

“Las versiones de 1999 y 2003 del estándar SQL requieren que las columnas que aparecen en la lista SELECT dependan funcionalmente de los grupos definidos por la cláusula GROUP BY. En otras palabras, si sabemos que una columna contiene solo un valor para cualquier combinación dada de valores en las columnas que aparecen en la cláusula GROUP BY, podemos hacer referencia a la columna en la lista SELECT incluso si no aparece en una expresión agregada. –Por Roland Bouman

En términos sencillos:

Si las columnas en el grupo tienen una columna que es la clave principal o la clave única, la combinación solo tendrá un valor para otras columnas.

Pero agrupar por una columna única no tiene sentido, pero será útil cuando se trate de otras tablas.

Algunas excepciones:
MySQL le permite SELECCIONAR cualquier cosa en una consulta con grupo por. Se seleccionará en orden aleatorio y lo que sea primero lo devolverá.

Ejemplo:

Input:
select empId, empName, empAmount from emp group by empId, empName 

La consulta anterior no dará ningún error. Elegirá empAmount aleatorio de la lista y lo emparejará con empID y empName.

El comportamiento correcto se puede habilitar agregando un indicador (es decir, ONLY_FULL_GROUP_BY) o usando MySQL v5.7.5 o superior. En ese caso, la consulta generaría el error anterior.

Publicación traducida automáticamente

Artículo escrito por Nutan Maheshwari y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *