Heim  >  Artikel  >  Computer-Tutorials  >  So wählen Sie zufällig einen Datensatz aus einer Tabelle aus

So wählen Sie zufällig einen Datensatz aus einer Tabelle aus

WBOY
WBOYnach vorne
2024-01-15 14:18:161265Durchsuche

So wählen Sie zufällig einen Datensatz aus einer Tabelle aus

Wie man zufällig ein Datenelement aus einer Tabelle auswählt

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

Oracle-Zufallslesemethode für N Daten in der Tabelle:

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

Der Arbeitsaufwand besteht heutzutage darin, einen Datensatz zufällig aus einer relativ großen Tabelle abzurufen. Im Gegensatz zu MS SQLSERVER kann Oracle ihn direkt mit „Select TOP 1 * From TABLE Order By NewID“ effizient nach dem Zufallsprinzip abrufen. Nach viel Mühe haben wir eine Tabelle t_id mit 900.000 Datensätzen und nur einem Gameid-Feld verwendet. Es gibt keinen Index für dieses Feld. Die Tabelle enthält eine Reihe von Datensätzen von 100000 bis 999999 zum Testen Methode 1.

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 minus

SELECT gameid FROM t_id T WHERE rownum

dbms_output.put_line(to_char(n_id));

Ende;

/

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:docexcel.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen