Mysql
 sql >> Database >  >> RDS >> Mysql

Spiega la funzionalità di select max(...) ... group by in sql

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.