Nel caso di utilizzo di MAX()
il GROUP BY
La clausola essenzialmente indica al motore di query come raggruppare gli elementi da cui determinare un massimo. Nel tuo primo esempio stavi selezionando solo una singola colonna, quindi non era necessario il raggruppamento. Ma nel tuo secondo esempio avevi più colonne. Quindi devi dire al motore di query come determinare quali verranno confrontati per trovare un massimo.
Gli hai detto di raggruppare per id
colonna. Ciò significa che confronterà i record che hanno lo stesso id
e darti il massimo per ogni id
univoco . Poiché ogni record ha un id
diverso , in pratica non hai fatto nulla con quella clausola.
Ha raggruppato tutti i record con un id
di 1
(che era un singolo record) e ha restituito il record con il massimo id
da quel gruppo (che era quel record). Ha fatto lo stesso per 2
, 3
, ecc.
Nel caso delle tre colonne mostrate qui, l'unico posto in cui avrebbe senso raggruppare i tuoi record sarebbe su test_id
colonna. Qualcosa del genere:
SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null
GROUP BY test_id
Questo li raggrupperebbe in base a test_id
, quindi i risultati includeranno i record 6 (il massimo id
per test_id
0), 4 (l'id
massimo per test_id
1) e 8 (l'id
massimo per test_id
2). Suddividendo i record in questi tre gruppi in base ai tre valori univoci nel test_id
colonna, può effettivamente trovare un id
"massimo". all'interno di ogni gruppo.