sql >> Database >  >> RDS >> Mysql

Leg de functionaliteit uit van select max(...) ... group by in sql

In het geval van het gebruik van MAX() de GROUP BY clausule vertelt de query-engine in wezen hoe de items moeten worden gegroepeerd waaruit een maximum kan worden bepaald. In uw eerste voorbeeld selecteerde u slechts één kolom, dus groeperen was niet nodig. Maar in uw tweede voorbeeld had u meerdere kolommen. Dus je moet de zoekengine vertellen hoe te bepalen welke vergeleken worden om een ​​maximum te vinden.

Je hebt het verteld om te groeperen op id kolom. Wat betekent dat het records gaat vergelijken die dezelfde id . hebben en geef je het maximum voor elke unieke id . Aangezien elk record een andere id heeft , je hebt in wezen niets met die clausule gedaan.

Het groepeerde alle records met een id van 1 (wat een enkele record was), en retourneerde de record met de maximale id van die groep (wat dat record was). Het deed hetzelfde voor 2 , 3 , enz.

In het geval van de drie kolommen die hier worden getoond, is de enige plaats waar het zinvol zou zijn om uw records te groeperen op de test_id kolom. Zoiets als dit:

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

Dit zou ze groeperen op de test_id , dus de resultaten zullen records 6 bevatten (de maximale id voor test_id 0), 4 (de maximale id voor test_id 1) en 8 (de maximale id voor test_id 2). Door de records in die drie groepen te splitsen op basis van de drie unieke waarden in de test_id kolom, kan het effectief een "maximum" id . vinden binnen elke groep.



  1. Fout bij gebruik van een OLAP-verbinding:de MSOLAP-provider is niet geregistreerd op de lokale computer...

  2. De datum ophalen uit een Datetime-kolom in MySQL

  3. (Postgresql) maak de tabeltriggerfunctie voeg de ID-waarde van de gewijzigde rij in de logtabel in, voor aangepaste replicatie

  4. Installeer MariaDB op een Mac