Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por favor, explique a funcionalidade de select max(...) ... group by in sql


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.