Muszę losowo wybierać rzędy. Przykład: załóżmy, że tabela składa się ze 100 rekordów, ale muszę uzyskać tylko 20 rekordów z tych 100 rekordów, a wybór rekordów będzie losowy. Jak mógłbym z niego wyjść? Używam wyroczni jako mojego db. każda sugestia bardzo mi pomogłaby. góry dzięki ..Jak uzyskać losowo rekordy z bazy danych Oracle?
Odpowiedz
SELECT *
FROM (
SELECT *
FROM table
ORDER BY DBMS_RANDOM.VALUE)
WHERE rownum < 21;
SELECT column FROM
(SELECT column, dbms_random.value FROM table ORDER BY 2)
where rownum <= 20;
Aby losowo wybrać 20 wierszy myślę, że można lepiej, wybierając wiele z nich losowo uporządkowaną i wybraniu pierwszej 20 tego zestawu.
Coś jak:
Select *
from (select *
from table
order by dbms_random.value) -- you can also use DBMS_RANDOM.RANDOM
where rownum < 21;
Najlepiej używać do stolików, aby uniknąć wybierając duże ilości danych tylko odrzucić większość z nich.
SAMPLE() nie gwarantowana dać dokładnie 20 wierszy, ale może być odpowiedni (i może wykonywać znacznie lepiej niż pełnej kwerendy + sort-by-losowych dla dużych tabel):
SELECT *
FROM table SAMPLE(20);
Note : tutaj jest przybliżony procent, a nie liczba żądanych wierszy. W tym przypadku, ponieważ masz 100 wierszy, aby uzyskać około 20 wierszy, poprosimy o próbkę 20%.
Próbka jest szybka, ale nie wydaje się być bardzo losowa. rekordy w górę/na początku tabeli są preferowane. – craigrs84
to się stanie, jeśli zatrzymasz zapytanie, zanim przejdzie przez całą tabelę. –
Niestety popełniłem błąd, twój wpis jest w porządku, a wyniki są równo rozłożone. Kiedy dodajesz "gdzie rownum <= 20" w połączeniu z próbką (20), dane stają się mniej losowe. – craigrs84
SELECT * FROM table SAMPLE(10) WHERE ROWNUM <= 20;
Jest to bardziej wydajny sposób, ponieważ nie trzeba sortować tabeli.
Zatrzymanie próbki po 20 wierszach spowoduje, że wyniki nie będą losowe (wiersze znalezione wcześniej w tabeli będą zwracane znacznie częściej niż później). Ponadto nie ma gwarancji, że zwróci 20 wierszy. –
- 1. Jak wstawić rekordy 50 KB do bazy danych Oracle?
- 2. Łącze do bazy danych Oracle
- 3. osadzone bazy danych Oracle JVM
- 4. Jak uzyskać dane z bazy danych Parse.com
- 5. Jak programowo generować DDL z bazy danych Oracle?
- 6. Kopiowanie danych z jednej bazy danych do drugiej w Oracle
- 7. Przykładowy schemat bazy danych dla Oracle
- 8. Korzystanie z bazy danych Oracle z CakePHP 2.0
- 9. połączenie bazy danych Oracle w web.config asp.net
- 10. Jak uzyskać datę i godzinę w formacie 24-godzinnym z bazy danych Oracle?
- 11. Wyświetl wszystkie widoki bazy danych Oracle
- 12. Jak uzyskać niedopasowane rekordy z dwóch tabel
- 13. Jak wybrać pierwsze rekordy "N" z bazy danych zawierającej miliony rekordów?
- 14. Uzyskać minimum z kolumny bazy danych SQLite?
- 15. Wybierz rekordy na określony rok Oracle
- 16. Narzędzia do generowania diagramu bazy danych/diagramu ER z istniejącej bazy danych Oracle?
- 17. Jak uzyskać nazwę bazy danych sqlserver
- 18. Jak uzyskać instancję bazy danych w grails?
- 19. Jak zamienić określone wartości w kolumnie bazy danych Oracle?
- 20. Jak eksportować schemat bazy danych w Oracle do pliku zrzutu
- 21. Jak uzyskać rekordy RANDOM z każdej kategorii w MySQL?
- 22. Załaduj arkusz danych programu Excel do bazy danych Oracle
- 23. Włóż blob do bazy oracle z C#
- 24. Jak uzyskać wszystkie nazwy tabel z bazy danych?
- 25. Jak uzyskać liczbę wierszy z bazy danych lazuru?
- 26. Jak uzyskać metadane bazy danych z menedżera encji
- 27. Jak uzyskać ostatnio wstawiony identyfikator rzędu z bazy danych Wordpress?
- 28. Rozszerzenie bazy danych PHPUnit - Jak uzyskać pusty zbiór danych?
- 29. Usuwanie najstarszych rekordów z bazy danych
- 30. Jak ... Wyświetlanie danych z bazy
Czy nie powinien to być "DBMS_RANDOM.VALUE"? – Filburt
To też działa. – cagcowboy
Pokonaj mnie. Będzie to jednak tylko wybrać pierwsze 20 wierszy z tabeli i zamówić je losowo. –