V případě použití MAX()
GROUP BY
klauzule v podstatě říká dotazovacímu stroji, jak seskupit položky, ze kterých lze určit maximum. Ve vašem prvním příkladu jste vybírali pouze jeden sloupec, takže nebylo nutné seskupování. Ale ve vašem druhém příkladu jste měli více sloupců. Takže musíte dotazovacímu modulu sdělit, jak určit, které z nich budou porovnávány, abyste našli maximum.
Řekli jste, že se má seskupit podle id
sloupec. Což znamená, že porovná záznamy, které mají stejné id
a poskytne vám maximum pro každé jedinečné id
. Protože každý záznam má jiné id
, s tou klauzulí jste v podstatě nic neudělali.
Seskupil všechny záznamy s id
z 1
(což byl jeden záznam) a vrátil záznam s maximálním id
z té skupiny (což byl ten záznam). Totéž udělalo pro 2
, 3
, atd.
V případě tří zde uvedených sloupců by jediné místo, kde by mělo smysl seskupit záznamy, bylo na test_id
sloupec. Něco takového:
SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null
GROUP BY test_id
Tím by se seskupily podle test_id
, takže výsledky budou zahrnovat záznamy 6 (maximální id
pro test_id
0), 4 (maximální id
pro test_id
1) a 8 (maximální id
pro test_id
2). Rozdělením záznamů do těchto tří skupin na základě tří jedinečných hodnot v test_id
může efektivně najít "maximální" id
v každé skupině.