In het geval van het gebruik van MAX()
de GROUP BY
clausule vertelt de query-engine in wezen hoe de items moeten worden gegroepeerd waaruit een maximum kan worden bepaald. In uw eerste voorbeeld selecteerde u slechts één kolom, dus groeperen was niet nodig. Maar in uw tweede voorbeeld had u meerdere kolommen. Dus je moet de zoekengine vertellen hoe te bepalen welke vergeleken worden om een maximum te vinden.
Je hebt het verteld om te groeperen op id
kolom. Wat betekent dat het records gaat vergelijken die dezelfde id
. hebben en geef je het maximum voor elke unieke id
. Aangezien elk record een andere id
heeft , je hebt in wezen niets met die clausule gedaan.
Het groepeerde alle records met een id
van 1
(wat een enkele record was), en retourneerde de record met de maximale id
van die groep (wat dat record was). Het deed hetzelfde voor 2
, 3
, enz.
In het geval van de drie kolommen die hier worden getoond, is de enige plaats waar het zinvol zou zijn om uw records te groeperen op de test_id
kolom. Zoiets als dit:
SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null
GROUP BY test_id
Dit zou ze groeperen op de test_id
, dus de resultaten zullen records 6 bevatten (de maximale id
voor test_id
0), 4 (de maximale id
voor test_id
1) en 8 (de maximale id
voor test_id
2). Door de records in die drie groepen te splitsen op basis van de drie unieke waarden in de test_id
kolom, kan het effectief een "maximum" id
. vinden binnen elke groep.