Random Czy istnieje opcja losowego wyboru losowego rekordu z baz. Oczywiście, że tak.
Wszystkie rozwiązanie koncentrują się wygenerowaniu losowej liczby, a potem przypisanie jej do polecenia OrderBY.
Dla SQL Serwera rozwiązanie tego problemu jest następujące
USE AdventureWorks2014
GO
SELECT TOP (10) [BusinessEntityID]
,[FirstName]
,[MiddleName]
FROM [AdventureWorks2014].[Person].[Person]
ORDER BY NEWID()
GO
NewId() stworzy z każdym razem inną losową liczbę, co gwarantuje mały brak potworzeń w takiej losowości.
Jak rozwiązanie wygląda w innych bazach :
MySql:
SELECT column FROM table
ORDER BY RAND()
LIMIT 10
PostgreSQL:
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 10
Oracle
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 10
A czy można zrobić jakieś inne podejście niż korzystanie z generowanych liczb losowych dla każdego rekordu.
Można wylosować ID, które chcemy pobrać. Oto przykład jak to zrobić w SQL Server
USE AdventureWorks2014
GO
SELECT TOP (10) [BusinessEntityID]
,[FirstName]
,[MiddleName]
FROM [AdventureWorks2014].[Person].[Person]
WHERE [BusinessEntityID] >= RAND() * (SELECT MAX([BusinessEntityID] + 1)
FROM [AdventureWorks2014].[Person].[Person])
GO