Ich verwende MSSQL Server 2005. In meiner Datenbank habe ich eine Tabelle "customerNames", die zwei Spalten "Id" und "Name" enthält. 1.000 Ergebnisse.
Ich erstelle eine Funktionalität, bei der ich jedes Mal 5 Kunden zufällig auswählen muss. Kann mir jemand sagen, wie man eine Abfrage erstellt, die jedes Mal, wenn eine Abfrage ausgeführt wird, zufällige 5 Zeilen (ID und Name) erhält?
Antworten:
Trotzdem scheint jeder auf diese Seite zu kommen, um eine allgemeinere Antwort auf Ihre Frage zu erhalten:
Auswählen einer zufälligen Zeile in SQL
Wählen Sie mit MySQL eine zufällige Zeile aus:
Wählen Sie mit PostgreSQL eine zufällige Zeile aus:
Wählen Sie mit Microsoft SQL Server eine zufällige Zeile aus:
Wählen Sie mit IBM DB2 eine zufällige Zeile aus
Wählen Sie mit Oracle einen zufälligen Datensatz aus:
Wählen Sie eine zufällige Zeile mit SQLite:
quelle
update tbl_vouchers set tbl_UsersID = (select top(1) id from tbl_Users order by NEWID())
- Bearbeiten: Ich kann die Formatierung in Kommentaren nicht zum Laufen bringen :(quelle
Falls jemand eine PostgreSQL-Lösung möchte:
quelle
Vielleicht hilft diese Seite weiter.
Für diejenigen, die nicht durchklicken möchten:
quelle
Hier gibt es eine nette Microsoft SQL Server 2005-spezifische Lösung. Behandelt das Problem, bei dem Sie mit einer großen Ergebnismenge arbeiten (nicht die Frage, die ich kenne).
Zufällige Auswahl von Zeilen aus einer großen Tabelle http://msdn.microsoft.com/en-us/library/cc441928.aspx
quelle
Wenn Sie eine Tabelle mit Millionen von Zeilen haben und sich um die Leistung kümmern, könnte dies eine bessere Antwort sein:
https://msdn.microsoft.com/en-us/library/cc441928.aspx
quelle
Dies ist eine alte Frage, aber der Versuch, ein neues Feld (entweder NEWID () oder ORDER BY rand ()) auf eine Tabelle mit einer großen Anzahl von Zeilen anzuwenden, wäre unerschwinglich teuer. Wenn Sie inkrementelle, eindeutige IDs haben (und keine Löcher haben), ist es effizienter, die X-Anzahl der auszuwählenden IDs zu berechnen, anstatt eine GUID oder ähnliches für jede einzelne Zeile anzuwenden und dann die oberste X-Nummer von zu übernehmen.
Wenn Sie viel mehr Zeilen auswählen möchten, würde ich eine #tempTable mit einer ID und einer Reihe von rand () -Werten füllen und dann jeden rand () -Wert verwenden, um auf die min-max-Werte zu skalieren. Auf diese Weise müssen Sie nicht alle @ randomId1 ... n-Parameter definieren. Ich habe unten ein Beispiel mit einem CTE zum Auffüllen der Anfangstabelle eingefügt.
quelle
quelle
Ich habe festgestellt, dass dies am besten für Big Data funktioniert.
TABLESAMPLE(n ROWS) or TABLESAMPLE(n PERCENT)
ist zufällig, muss aber hinzugefügt werdenTOP n
, um die richtige Stichprobengröße zu erhalten.Bei
NEWID()
großen Tischen ist die Verwendung sehr langsam.quelle
Wie in diesem Artikel erläutert , müssen Sie zum Mischen der SQL-Ergebnismenge einen datenbankspezifischen Funktionsaufruf verwenden.
Angenommen, wir haben die folgende Datenbanktabelle:
Und die folgenden Zeilen in der
song
Tabelle:Orakel
Unter Oracle müssen Sie die
DBMS_RANDOM.VALUE
Funktion verwenden, wie im folgenden Beispiel dargestellt:Wenn Sie die oben genannte SQL-Abfrage unter Oracle ausführen, erhalten Sie die folgende Ergebnismenge:
SQL Server
Unter SQL Server müssen Sie die
NEWID
Funktion verwenden, wie im folgenden Beispiel dargestellt:Wenn Sie die oben genannte SQL-Abfrage unter SQL Server ausführen, erhalten Sie die folgende Ergebnismenge:
PostgreSQL
Unter PostgreSQL müssen Sie die
random
Funktion verwenden, wie im folgenden Beispiel dargestellt:Wenn Sie die oben genannte SQL-Abfrage unter PostgreSQL ausführen, erhalten Sie die folgende Ergebnismenge:
MySQL
Unter MySQL müssen Sie die
RAND
Funktion verwenden, wie im folgenden Beispiel dargestellt:Wenn Sie die oben genannte SQL-Abfrage unter MySQL ausführen, erhalten Sie die folgende Ergebnismenge:
quelle
Wenn Sie eine große Tabelle verwenden und auf 10 Prozent der Daten zugreifen möchten, führen Sie den folgenden Befehl aus:
SELECT TOP 10 PERCENT * FROM Table1 ORDER BY NEWID();
quelle