-
Sí. Las columnas no agregadas son cualquier columna que no use una función de agregación como
MAX,COUNT,SUM,GROUP_CONCAT, etc. -
Columna
adepende funcionalmente de la columnabsi el valor debimplica un valor particular dea. Esto generalmente significa quebes una clave única para la tabla, yaes alguna otra columna en esa tabla. -
Determinado únicamente por es lo mismo que la dependencia funcional.
-
La alternativa sería listar todas las columnas no agregadas en el
GROUP BYlista:GROUP BY a.Z, a.Y, a.X.
La razón de todo esto es que cuando selecciona columnas que no están en el GROUP BY list, provendrán de filas arbitrarias en las filas agrupadas. Esto conduce a muchos errores comunes. Por ejemplo, un error común es escribir:
SELECT user_id, MAX(timestamp), ip_address
FROM user_logins
GROUP BY user_id
y esperar ip_address para contener la dirección del inicio de sesión más reciente para cada usuario. Pero en realidad contendrá cualquier de las direcciones desde las que iniciaron sesión, no la de la fila con MAX(timestamp) . Consulte SQL Seleccionar solo filas con valor máximo en una columna
para conocer la forma correcta de hacerlo.
La excepción de dependencia funcional suele ser útil con uniones.
SELECT u.user_id, u.user_name, MAX(l.timestamp)
FROM users AS u
JOIN user_logins AS l ON u.user_id = l.user_id
GROUP BY u.user_id
Desde user_id es la clave principal de los users tabla, determina de forma única user_name , por lo que no es necesario enumerarlo explícitamente en GROUP BY .