Det är sant att den här funktionen tillåter en del tvetydiga frågor, och returnerar tyst en resultatuppsättning med ett godtyckligt värde plockat från den kolumnen. I praktiken tenderar det att vara värdet från raden inom gruppen som fysiskt lagras först.
Dessa frågor är inte tvetydiga om du bara väljer kolumner som är funktionellt beroende av kolumnen/kolumnerna i GROUP BY-kriterierna. Med andra ord, om det bara kan finnas ett distinkt värde av den "tvetydiga" kolumnen per värde som definierar gruppen, är det inga problem. Den här frågan skulle vara olaglig i Microsoft SQL Server (och ANSI SQL), även om den logiskt inte kan leda till oklarhet:
SELECT AVG(table1.col1), table1.personID, persons.col4
FROM table1 JOIN persons ON (table1.personID = persons.id)
GROUP BY table1.personID;
MySQL har också ett SQL-läge för att få det att fungera enligt standarden:ONLY_FULL_GROUP_BY
FWIW, SQLite tillåter också dessa tvetydiga GROUP BY-satser, men den väljer värdet från den senaste rad i gruppen.
Åtminstone i den version jag testade. Vad det innebär att vara godtycklig är att antingen MySQL eller SQLite skulle kunna ändra sin implementering i framtiden och ha något annorlunda beteende. Du bör därför inte lita på att beteendet förblir som det är för närvarande i tvetydiga fall som detta. Det är bättre att skriva om dina frågor så att de är deterministiska och inte tvetydiga. Det är därför MySQL 5.7 nu aktiverar ONLY_FULL_GROUP_BY som standard.