No caso de usar
MAX()
o GROUP BY
A cláusula essencialmente informa ao mecanismo de consulta como agrupar os itens dos quais determinar um máximo. No seu primeiro exemplo, você estava selecionando apenas uma única coluna, portanto, não havia necessidade de agrupamento. Mas no seu segundo exemplo você tinha várias colunas. Portanto, você precisa informar ao mecanismo de consulta como determinar quais serão comparados para encontrar um máximo. Você disse para agrupar pelo
id
coluna. O que significa que vai comparar registros que têm o mesmo id
e fornecer o máximo para cada id
exclusivo . Como cada registro tem um id
diferente , você essencialmente não fez nada com essa cláusula. Ele agrupou todos os registros com um
id
de 1
(que era um único registro) e retornou o registro com o máximo de id
daquele grupo (que era aquele disco). Ele fez o mesmo para 2
, 3
, etc No caso das três colunas mostradas aqui, o único lugar onde faria sentido agrupar seus registros seria no
test_id
coluna. Algo assim:SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null
GROUP BY test_id
Isso os agruparia pelo
test_id
, então os resultados incluirão os registros 6 (o id
máximo para test_id
0), 4 (o id
máximo para test_id
1) e 8 (o id
máximo para test_id
2). Ao dividir os registros nesses três grupos com base nos três valores exclusivos no test_id
coluna, ele pode efetivamente encontrar um id
"máximo" dentro de cada grupo.