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

Explique la funcionalidad de select max(...) ... group by en sql

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.