Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Random Result Group By Order By

Ihre Abfrage verstößt gegen den SQL-Standard, da Sie Spalten in der Auswahlliste auflisten, die Sie nicht in der group by-Klausel auflisten, noch Gegenstand einer Aggregatfunktion wie count() sind. MySQL erlaubt diese Funktionalität unter bestimmten SQL-Moduseinstellungen.

Aber selbst wenn diese Funktionalität aktiviert ist, hat MySQL Einschränkungen die aus den nicht aggregierten Feldern ausgewählten Daten :

Verwenden Sie also anstelle von group by die Sortierung und die limit-Klausel, um die Ausgabe einzuschränken:

select * from job
    where type = 1
    order by rand()
    limit 1

Bitte beachten Sie auch, dass diese zufällige Auswahlmethode sehr ressourcenintensiv ist, da MySQL zuerst die gesamte Ergebnismenge sortieren muss, ohne einen Index zu verwenden. Es gibt andere Möglichkeiten, Daten zufällig aus einer Tabelle auszuwählen, ohne order by rand() zu verwenden .