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.