sql >> Database >  >> RDS >> Mysql

Welke rijvelden worden geretourneerd bij Groeperen met MySQL?

Welke id wordt geretourneerd ( 1, 2 of 3 )?

A:De server kiest voor alle records met dezelfde naam het gewenste ID (waarschijnlijk het snelst op te halen, wat onvoorspelbaar is). Om de officiële documentatie te citeren:

Veel meer informatie in deze link .

Welke id gaat deze zoekopdracht ORDER BY (zelfde als wordt geretourneerd? ... zie vraag 1)?

Het heeft geen zin om uit te zoeken in welke volgorde de opgehaalde gegevens worden geretourneerd, omdat u het resultaat niet kunt voorspellen. Het is echter zeer waarschijnlijk dat u het resultaat krijgt gesorteerd op de onvoorspelbare ID-kolom.

Kunt u bepalen welke id wordt geretourneerd/gebruikt voor het bestellen? bijv. Retourneer de grootste id, of de eerste id van een GROEP.

Je zou op dit punt moeten aannemen dat je dat niet kunt. Lees de documentatie opnieuw.

Om het nog duidelijker te maken:u kunt het resultaat van een onjuist gebruikte GROUP BY-clausule niet voorspellen. Het belangrijkste probleem met MySQL is dat je het op een niet-standaard manier kunt gebruiken, maar je moet weten hoe je van die functie gebruik kunt maken. Het belangrijkste punt hierachter is om te groeperen op velden waarvan u weet dat ze altijd hetzelfde zullen zijn. Bv:

SELECT id, name, COUNT( * ) AS frequency
FROM table
GROUP BY id

Hier, je kent name zal uniek zijn als id bepaalt functioneel name . Dus het resultaat dat je weet is geldig. Als u ook op naam zou groeperen, zou deze zoekopdracht meer standaard zijn, maar iets slechter presteren in MySQL.

Houd er als laatste opmerking rekening mee dat, naar mijn ervaring, de resultaten in die niet-standaard zoekopdrachten voor de geselecteerde en niet-gegroepeerde velden meestal degene zijn die u zou krijgen als u een GROUP BY toepast. en dan een ORDER BY op dat veld. Dat is waarom het zo vaak lijkt werken. Als je echter blijft testen, kom je er uiteindelijk achter dat dit 95% van de tijd gebeurt. En op dat nummer kun je niet vertrouwen.



  1. Het aantal kolommen van mysql.proc is onjuist. Verwacht 20, gevonden 16. De tabel is waarschijnlijk beschadigd

  2. Is er voor een beginner veel verschil tussen MySQL en PostgreSQL?

  3. Tabellen koppelen met behulp van de Room-database in Android Studio

  4. Hoe Abs() werkt in PostgreSQL