В случай на използване на MAX()
GROUP BY
клауза по същество казва на машината за заявки как да групира елементите, от които да определи максимум. В първия си пример избирахте само една колона, така че нямаше нужда от групиране. Но във втория ви пример имахте множество колони. Така че трябва да кажете на машината за заявки как да определи кои ще бъдат сравнени, за да се намери максимум.
Казахте му да се групира по id
колона. Което означава, че ще сравни записи, които имат еднакъв id
и ви дава максималния за всеки уникален id
. Тъй като всеки запис има различен id
, по същество не сте направили нищо с тази клауза.
Той групира всички записи с id
от 1
(което беше единичен запис) и върна записа с максималния id
от тази група (което беше този запис). Той направи същото за 2
, 3
и т.н.
В случая с трите колони, показани тук, единственото място, където би имало смисъл да групирате вашите записи, би било test_id
колона. Нещо подобно:
SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null
GROUP BY test_id
Това ще ги групира по test_id
, така че резултатите ще включват записи 6 (максималния id
за test_id
0), 4 (максималния id
за test_id
1) и 8 (максималния id
за test_id
2). Чрез разделяне на записите в тези три групи въз основа на трите уникални стойности в test_id
колона, той може ефективно да намери "максимален" id
във всяка група.