Estoy tratando de agregar características a una aplicación preexistente y me encontré con una vista MySQL algo como esto:MySQL - Selección de una columna no en Agrupar por
SELECT
AVG(table_name.col1),
AVG(table_name.col2),
AVG(table_name.col3),
table_name.personID,
table_name.col4
FROM table_name
GROUP BY table_name.personID;
bien así que hay algunas funciones de agregado. Puede seleccionar personID porque está agrupando por él. Pero también selecciona una columna que no está en una función agregada y no forma parte de la cláusula GROUP BY. ¿¿¿Cómo es esto posible??? ¿Simplemente elige un valor aleatorio porque los valores definitivamente no son únicos por grupo?
De donde vengo (servidor MSSQL), eso es un error. ¿Puede alguien explicarme este comportamiento y por qué está permitido en MySQL?
Me gustaría comentar que esto no es del todo cierto. A partir de ANSI SQL-99 los campos seleccionados deben ser agregados, son funcionalmente dependientes de la cláusula group by. Por lo tanto, seleccionar user_name al agrupar por user_id es totalmente correcto. SQL Server y Oracle no cumplen con esto, porque no permitirían que se seleccione user_name cuando solo user_id está en el grupo por lista; y MySQL no cumple, porque no verifica si cada columna seleccionada depende realmente funcionalmente de user_id. –
@ThorstenKettner, gracias, tienes razón. Se ha mejorado MySQL 5.7, y es mucho más inteligente en este caso de compatibilidad con ANSI SQL. –