Dans le cas de l'utilisation de MAX()
le GROUP BY
La clause indique essentiellement au moteur de requête comment regrouper les éléments à partir desquels déterminer un maximum. Dans votre premier exemple, vous ne sélectionniez qu'une seule colonne, il n'était donc pas nécessaire de grouper. Mais dans votre deuxième exemple, vous aviez plusieurs colonnes. Vous devez donc indiquer au moteur de requête comment déterminer lesquels vont être comparés pour trouver un maximum.
Vous lui avez dit de grouper par id
colonne. Ce qui signifie qu'il va comparer les enregistrements qui ont le même id
et vous donner le maximum pour chaque id
unique . Étant donné que chaque enregistrement a un id
différent , vous n'avez pratiquement rien fait avec cette clause.
Il a regroupé tous les enregistrements avec un id
de 1
(qui était un enregistrement unique), et a renvoyé l'enregistrement avec le maximum id
de ce groupe (qui était ce record). Il en a été de même pour 2
, 3
, etc.
Dans le cas des trois colonnes présentées ici, le seul endroit où il serait logique de regrouper vos enregistrements serait sur le test_id
colonne. Quelque chose comme ça :
SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null
GROUP BY test_id
Cela les regrouperait par test_id
, ainsi les résultats incluront les enregistrements 6 (le maximum id
pour test_id
0), 4 (l'id
maximum pour test_id
1) et 8 (l'id
maximum pour test_id
2). En divisant les enregistrements en ces trois groupes en fonction des trois valeurs uniques dans le test_id
colonne, il peut effectivement trouver un id
"maximum" au sein de chaque groupe.