611 Stimmen

Wie kann man eine zufällige Zeile in SQL anfordern?

Wie kann ich in reinem SQL eine zufällige Zeile anfordern (oder eine, die dem echten Zufall so nahe wie möglich kommt)?

2voto

Sophy Punkte 7895

Damit MySQL einen zufälligen Datensatz erhält

 SELECT name
  FROM random AS r1 JOIN
       (SELECT (RAND() *
                     (SELECT MAX(id)
                        FROM random)) AS id)
        AS r2
 WHERE r1.id >= r2.id
 ORDER BY r1.id ASC
 LIMIT 1

Mehr Details http://jan.kneschke.de/projects/mysql/order-by-rand/

1voto

Sie können auch Folgendes versuchen new id() Funktion.

Schreiben Sie einfach eine Abfrage und verwenden Sie order by new id() Funktion. Es ist ziemlich zufällig.

1voto

David Knight Punkte 755

In MSSQL (getestet auf 11.0.5569) mit

SELECT TOP 100 * FROM employee ORDER BY CRYPT_GEN_RANDOM(10)

ist deutlich schneller als

SELECT TOP 100 * FROM employee ORDER BY NEWID()

1voto

Luigi04 Punkte 429

Für Firebird:

Select FIRST 1 column from table ORDER BY RAND()

1voto

Chris Arbogast Punkte 103

In SQL Server können Sie TABLESAMPLE mit NEWID() kombinieren, um eine ziemlich gute Zufälligkeit zu erhalten und trotzdem schnell zu sein. Dies ist besonders nützlich, wenn Sie wirklich nur 1 oder eine kleine Anzahl von Zeilen benötigen.

SELECT TOP 1 * FROM [table] 
TABLESAMPLE (500 ROWS) 
ORDER BY NEWID()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X