W przypadku użycia MAX() GROUP BY Klauzula zasadniczo mówi mechanizmowi zapytań, jak pogrupować elementy, z których ma zostać określone maksimum. W pierwszym przykładzie wybierałeś tylko jedną kolumnę, więc nie było potrzeby grupowania. Ale w drugim przykładzie miałeś wiele kolumn. Musisz więc powiedzieć silnikowi zapytań, jak określić, które z nich będą porównywane, aby znaleźć maksimum.
Kazałeś grupować według id kolumna. Co oznacza, że będzie porównywać rekordy, które mają ten sam id i dać ci maksymalną wartość dla każdego unikalnego id . Ponieważ każdy rekord ma inny id , zasadniczo nie zrobiłeś nic z tą klauzulą.
Pogrupował wszystkie rekordy z id z 1 (który był pojedynczym rekordem) i zwrócił rekord z maksymalnym id z tej grupy (która była tym rekordem). To samo zrobiło dla 2 , 3 itp.
W przypadku trzech kolumn pokazanych tutaj, jedynym miejscem, w którym sensowne byłoby grupowanie rekordów, byłby test_id kolumna. Coś takiego:
SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null
GROUP BY test_id
Spowoduje to pogrupowanie ich według test_id , więc wyniki będą zawierać rekordy 6 (maksymalny id dla test_id 0), 4 (maksymalny id dla test_id 1) i 8 (maksymalny id dla test_id 2). Dzieląc rekordy na te trzy grupy na podstawie trzech unikalnych wartości w test_id kolumna, może skutecznie znaleźć „maksymalny” id w każdej grupie.