sql >> Base de Datos >  >> RDS >> Mysql

¿Qué campos de fila se devuelven al agrupar con MySQL?

¿Qué identificación se devolverá (1, 2 o 3)?

R:El servidor elegirá para todos los registros que tengan el mismo nombre la identificación que desea (lo más probable es que sea la más rápida de obtener, lo cual es impredecible). Para citar la documentación oficial:

Mucha más información en este enlace .

¿A qué ID se dirige esta consulta ORDER BY (¿igual que se devuelve?... ver pregunta 1)?

No tiene sentido averiguar en qué orden se devolverán los datos recuperados, ya que no puede predecir el resultado que obtendrá. Sin embargo, es muy probable que obtenga el resultado ordenado por la columna de ID impredecible.

¿Puedes controlar qué identificación se devuelve o se usa para realizar el pedido? p.ej. Devuelve la identificación más grande o la primera identificación de un GRUPO.

Deberías estar asumiendo en este punto que no puedes. Vuelve a leer la documentación.

Haciendo las cosas aún más claras:no puede predecir el resultado de una cláusula GROUP BY utilizada incorrectamente. El problema principal con MySQL es que le permite usarlo de una manera no estándar, pero necesita saber cómo usar esa característica. El punto principal detrás de esto es agrupar por campos que sabes que siempre serán los mismos. Por ejemplo:

SELECT id, name, COUNT( * ) AS frequency
FROM table
GROUP BY id

Toma, conoces name será único como id determina funcionalmente name . Así que el resultado que sabes es válido. Si agrupó también por nombre, esta consulta sería más estándar pero tendrá un rendimiento ligeramente peor en MySQL.

Como nota final, tenga en cuenta que, en mi experiencia, los resultados en esas consultas no estándar para los campos seleccionados y no agrupados suelen ser los que obtendría aplicando un GROUP BY y luego un ORDER BY en ese campo. Por eso tantas veces parece trabajar. Sin embargo, si continúa probando, eventualmente descubrirá que esto sucede el 95% del tiempo. Y no puedes confiar en ese número.