sql >> Database >  >> RDS >> Mysql

GROUP BY-gedrag wanneer er geen aggregatiefuncties aanwezig zijn in de SELECT-component

Lees MySQL-documentatie op dit specifieke punt.

In een notendop, MySQL staat het weglaten van enkele kolommen uit de GROUP BY toe, voor prestatiedoeleinden, maar dit werkt alleen als de weggelaten kolommen allemaal dezelfde waarde hebben (binnen een groepering), anders is de waarde die door de zoekopdracht wordt geretourneerd inderdaad onbepaald , zoals goed geraden door anderen in dit bericht. Om er zeker van te zijn dat het toevoegen van een ORDER BY-clausule geen enkele vorm van deterministisch gedrag opnieuw zou introduceren.

Hoewel dit niet de kern van het probleem vormt, laat dit voorbeeld zien hoe het gebruik van * in plaats van een expliciete opsomming van gewenste kolommen vaak een slecht idee is.

Fragment uit MySQL 5.0-documentatie:

When using this feature, all rows in each group should have the same values
for the columns that are omitted from the GROUP BY part. The server is free
to return any value from the group, so the results are indeterminate unless
all values are the same. 


  1. Waarom geeft SQL-server deze fout:Kan de waarde NULL niet invoegen in kolom 'id'?

  2. Transacties uitvoeren tijdens het uitvoeren van een postgreql-functie

  3. 5 fouten bij het ontwerpen van databases die u moet vermijden

  4. Fix "ERROR 1250 (42000):Tabel '...' van een van de SELECT's kan niet worden gebruikt in de globale ORDER-clausule" bij gebruik van UNION in MySQL