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

Forklar venligst funktionaliteten af ​​select max(...) ... group by i sql

I tilfælde af brug af MAX() GROUP BY klausul fortæller i det væsentlige forespørgselsmotoren, hvordan man grupperer de elementer, hvorfra der skal bestemmes et maksimum. I dit første eksempel valgte du kun en enkelt kolonne, så der var ikke behov for gruppering. Men i dit andet eksempel havde du flere kolonner. Så du skal fortælle forespørgselsmotoren, hvordan man bestemmer, hvilke der skal sammenlignes for at finde et maksimum.

Du fortalte det til at gruppere efter id kolonne. Hvilket betyder, at den kommer til at sammenligne poster, der har det samme id og give dig det maksimale for hvert unikt id . Da hver post har et andet id , du gjorde stort set ikke noget med den klausul.

Den grupperede alle poster med et id af 1 (som var en enkelt post), og returnerede posten med det maksimale id fra den gruppe (som var den rekord). Det gjorde det samme for 2 , 3 osv.

I tilfælde af de tre kolonner, der er vist her, ville det eneste sted, hvor det ville give mening at gruppere dine poster, være på test_id kolonne. Noget som dette:

SELECT MAX(id), title, test_id
FROM images
WHERE image IS NOT null 
GROUP BY test_id

Dette ville gruppere dem efter test_id , så resultaterne vil inkludere post 6 (det maksimale id). for test_id 0), 4 (det maksimale id for test_id 1) og 8 (det maksimale id for test_id 2). Ved at opdele posterne i disse tre grupper baseret på de tre unikke værdier i test_id kolonne, kan den effektivt finde et "maksimalt" id inden for hver gruppe.



  1. JOIN-forespørgsler vs. flere forespørgsler

  2. Kan ikke åbne View->DBA Menu i SQL Developer (Oracle 12C Standard Edition installeret)

  3. org.postgresql.util.PSQLEundtagelse:FEJL:Relation app_user eksisterer ikke

  4. Adgang nægtet, når rails forbindes til Mysql