Mysql
 sql >> Base de données >  >> RDS >> Mysql

Veuillez expliquer la fonctionnalité de select max(...) ... group by in sql

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.