En el caso de usar MAX()
el GROUP BY
La cláusula esencialmente le dice al motor de consulta cómo agrupar los elementos a partir de los cuales determinar un máximo. En su primer ejemplo, estaba seleccionando solo una columna, por lo que no había necesidad de agrupar. Pero en su segundo ejemplo, tenía varias columnas. Por lo tanto, debe indicarle al motor de consulta cómo determinar cuáles se compararán para encontrar un máximo.
Le dijiste que se agrupara por el id
columna. Lo que significa que comparará registros que tienen el mismo id
y darte el máximo para cada id
único . Dado que cada registro tiene un id
diferente , esencialmente no hiciste nada con esa cláusula.
Agrupó todos los registros con un id
de 1
(que era un solo registro), y devolvió el registro con el máximo id
de ese grupo (que era ese disco). Hizo lo mismo para 2
, 3
, etc.
En el caso de las tres columnas que se muestran aquí, el único lugar donde tendría sentido agrupar sus registros sería en test_id
columna. Algo como esto:
SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null
GROUP BY test_id
Esto los agruparía por el test_id
, por lo que los resultados incluirán registros 6 (el máximo id
para test_id
0), 4 (el id
máximo para test_id
1) y 8 (el id
máximo para test_id
2). Al dividir los registros en esos tres grupos según los tres valores únicos en el test_id
columna, puede encontrar efectivamente un id
"máximo" dentro de cada grupo.