Heim > Artikel > Computer-Tutorials > So wählen Sie zufällig einen Datensatz aus einer Tabelle aus
Oracle-Zufallslesemethode für N Daten in der Tabelle:
1) select * from (select * from tablename order by sys_guid()) where rownum 2) select * from (select * from tablename order by dbms_random.value) where rownum3) select * from (select * from table_name sample(10) Reihenfolge nach trunc(dbms_random.value(0, 1000))), wobei rownum Beschreibung:
sample(10) bedeutet, dass 10 % der Daten in der Tabelle abgerufen werden. Der Beispielwert sollte zwischen [0,000001,99,999999] liegen, wobei sys_guid() und dbms_random.value beide interne Funktionen sind
Hinweis:Bei Verwendung der Methode sys_guid () werden manchmal dieselben Datensätze erhalten, dh die Ergebnismenge der vorherigen Abfrage ist dieselbe. Diese Situation kann mit dem Betriebssystem zusammenhängen. Beispielsweise ist sie unter Windows-Systemen normal und unter Linux-Systemen ungewöhnlich. Darüber hinaus kann es zu Problemen mit der Funktion sys_guid() selbst kommen und weitere Untersuchungen sind erforderlich.
Um sicherzustellen, dass die auf verschiedenen Plattformen gelesenen Daten zufällig sind, wird empfohlen, zwei Lösungen zu verwenden: 2) und 3). Unter diesen wird die Lösung 2) häufiger verwendet, und die Lösung 3) eignet sich zum Abfragen großer Tabellen und zum Extrahieren nicht vieler Daten und kann die Abfragegeschwindigkeit verbessern.
So wählen Sie zufällig einige Datensätze aus einem großen Datensatz aus
1
2
3
1) select * from (select * from tablename order by sys_guid()) where rownum 2) select * from (select * from tablename order by dbms_random.value) where rownum3) select * from (select * from table_name sample(10) Reihenfolge nach trunc(dbms_random.value(0, 1000))) wobei rownum
Beschreibung:
sample(10) bedeutet, dass 10 % der Daten in der Tabelle abgerufen werden. Der Beispielwert sollte zwischen [0,000001,99,999999] liegen, wobei sys_guid() und dbms_random.value beide interne Funktionen sind
Hinweis:
Bei Verwendung der Methode sys_guid () werden manchmal dieselben Datensätze erhalten, dh die Ergebnismenge der vorherigen Abfrage ist dieselbe. Diese Situation kann mit dem Betriebssystem zusammenhängen. Beispielsweise ist sie unter Windows normal und unter Linux ungewöhnlich. Darüber hinaus kann es zu Problemen mit der Funktion sys_guid() selbst kommen und weitere Untersuchungen sind erforderlich.
Um sicherzustellen, dass die auf verschiedenen Plattformen gelesenen Daten zufällig sind, wird empfohlen, zwei Lösungen zu verwenden: 2) und 3). Unter diesen wird die Lösung 2) häufiger verwendet, und die Lösung 3) eignet sich zum Abfragen großer Tabellen und zum Extrahieren nicht vieler Daten und kann die Abfragegeschwindigkeit verbessern.
So fragen Sie einen zufälligen Datensatz aus einer Tabelle in Oracle ab
Bei Verwendung von rownum und dbms_random.value beträgt die durchschnittliche Zeit 5 Sekunden. Für kleine Tische sollte sie in Ordnung sein, für große Tische ist sie jedoch nicht geeignet.
deklarieren
n_id-Nummer(6);
beginnen
SELECT gameid into n_id FROM(SELECT gameid FROM t_id T ORDER BY dbms_random.value()) WHERE ROWNUM=1;
dbms_output.put_line(to_char(n_id));
Ende;
/
Methode 2.
Bei Verwendung der Oracle-Beispielsyntax beträgt das Ergebnis etwa 0,01, was ziemlich schnell ist. Laut der offiziellen Website kann dies jedoch zu ungenauen Ergebnissätzen führen Der Test führt zu falschen Ergebnissen. Es gibt jedoch ein Problem: Die Verteilung der Zufallsergebnisse ist sehr ungleichmäßig und die Ergebnisse werden fast alle in den Datensätzen 100.000 bis 200.000 gespeichert. Obwohl die Effizienz gut ist, wird kein guter Zufallseffekt erzielt. Wenn die Ergebnisse nicht sehr hoch sind, ist diese Methode recht gut.
deklarieren
n_id-Nummer(6);
beginnen
SELECT gameid into n_id FROM t_id SAMPLE (1) WHERE ROWNUM = 1;
dbms_output.put_line(to_char(n_id));
Ende;
/
Methode 3.
Erhalten Sie mithilfe der Minus-Syntax zunächst zufällig eine Zufallszahl innerhalb des Bereichs der Gesamtzahl der Datensätze in der Tabelle, fragen Sie dann die beiden Ergebnismengen mit nur einem Datensatzunterschied über rownum ab und subtrahieren Sie mit Minus den Datensatz mit der Zufallszahl in Die durchschnittliche Zeit beträgt etwa 1 Sekunde. Je kleiner die Zufallszahl, desto schneller ist die Abfragegeschwindigkeit. Obwohl diese Methode
Es kann zu einem sehr zufälligen Effekt kommen, aber die Effizienz ist nicht so gut wie die von Methode 2. Wenn die Effizienz durchschnittlich ist, können Sie trotzdem darüber nachdenken, sie zu verwenden.
deklarieren
n_count int:=0;
n_rand_num int:=0;
n_id-Nummer(6);
beginnen
SELECT COUNT(*) INTO n_count FROM t_id;
SELECT trunc(dbms_random.value(1,n_count+1)) INTO n_rand_num FROM DUAL;
select gameid into n_id from (SELECT gameid FROM t_id T WHERE rownum
Das obige ist der detaillierte Inhalt vonSo wählen Sie zufällig einen Datensatz aus einer Tabelle aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!