sql >> Databasteknik >  >> RDS >> Mysql

Förklara funktionen för select max(...) ... group by i sql

Om du använder MAX() GROUP BY klausulen talar i huvudsak om för frågemotorn hur man grupperar objekten för att fastställa ett maximum. I ditt första exempel valde du bara en enda kolumn, så det fanns inget behov av gruppering. Men i ditt andra exempel hade du flera kolumner. Så du måste berätta för frågemotorn hur man avgör vilka som kommer att jämföras för att hitta ett maximum.

Du sa åt den att gruppera efter id kolumn. Vilket betyder att den kommer att jämföra poster som har samma id och ge dig det maximala för varje unikt id . Eftersom varje post har ett annat id , du gjorde i princip ingenting med den klausulen.

Den grupperade alla poster med ett id av 1 (som var en enda post), och returnerade posten med det maximala id från den gruppen (vilket var det rekordet). Det gjorde samma sak för 2 , 3 osv.

När det gäller de tre kolumnerna som visas här skulle det enda ställe där det skulle vara meningsfullt att gruppera dina poster på test_id kolumn. Något så här:

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

Detta skulle gruppera dem efter test_id , så resultaten kommer att inkludera post 6 (det maximala id). för test_id 0), 4 (det maximala id för test_id 1) och 8 (det maximala id). för test_id 2). Genom att dela upp posterna i dessa tre grupper baserat på de tre unika värdena i test_id kolumnen kan den effektivt hitta ett "maximalt" id inom varje grupp.



  1. Välj topp distinkta resultat sorterade efter frekvens

  2. Använd psqls \copy för en flerradsfråga

  3. Hur man kör denna Oracle-sats på JDBC

  4. MySQL-problem:LEFT JOIN på tomt bord