Estou usando o MSSQL Server 2005. No meu banco de dados, tenho uma tabela "customerNames" que possui duas colunas "Id" e "Name" e aprox. 1.000 resultados.
Estou criando uma funcionalidade em que preciso escolher 5 clientes aleatoriamente todas as vezes. Alguém pode me dizer como criar uma consulta que obterá 5 linhas aleatórias (ID e nome) toda vez que a consulta for executada?
Respostas:
Dito isto, todos parecem vir a esta página para obter uma resposta mais geral à sua pergunta:
Selecionando uma linha aleatória no SQL
Selecione uma linha aleatória com o MySQL:
Selecione uma linha aleatória com o PostgreSQL:
Selecione uma linha aleatória com o Microsoft SQL Server:
Selecione uma linha aleatória com o IBM DB2
Selecione um registro aleatório com o Oracle:
Selecione uma linha aleatória com sqlite:
fonte
update tbl_vouchers set tbl_UsersID = (select top(1) id from tbl_Users order by NEWID())
- edit: não consigo fazer a formatação funcionar nos comentários :(fonte
Caso alguém queira uma solução PostgreSQL:
fonte
Talvez este site seja útil.
Para aqueles que não querem clicar:
fonte
Há uma boa solução específica do Microsoft SQL Server 2005 aqui. Lida com o problema em que você está trabalhando com um grande conjunto de resultados (não é a pergunta que eu sei).
Selecionando linhas aleatoriamente em uma tabela grande http://msdn.microsoft.com/en-us/library/cc441928.aspx
fonte
Se você tem uma tabela com milhões de linhas e se preocupa com o desempenho, esta poderia ser uma resposta melhor:
https://msdn.microsoft.com/en-us/library/cc441928.aspx
fonte
Essa é uma pergunta antiga, mas tentar aplicar um novo campo (NEWID () ou ORDER BY rand ()) a uma tabela com um grande número de linhas seria proibitivamente caro. Se você tiver IDs incrementais únicos (e não tiver nenhum furo), será mais eficiente calcular o número de Xs de ID a ser selecionado em vez de aplicar um GUID ou semelhante a cada linha e, em seguida, obter o número de X superior de.
Se você quisesse selecionar muito mais linhas, gostaria de preencher uma #tempTable com um ID e vários valores de rand () e, em seguida, usar cada valor de rand () para dimensionar para os valores min-max. Dessa forma, você não precisa definir todos os parâmetros @ randomId1 ... n. Incluí um exemplo abaixo usando um CTE para preencher a tabela inicial.
fonte
fonte
Descobri que isso funciona melhor para big data.
TABLESAMPLE(n ROWS) or TABLESAMPLE(n PERCENT)
é aleatório, mas é necessário adicionar oTOP n
para obter o tamanho de amostra correto.O uso
NEWID()
é muito lento em tabelas grandes.fonte
Como expliquei neste artigo , para embaralhar o conjunto de resultados SQL, você precisa usar uma chamada de função específica do banco de dados.
Portanto, supondo que tenhamos a seguinte tabela de banco de dados:
E as seguintes linhas na
song
tabela:Oráculo
No Oracle, você precisa usar a
DBMS_RANDOM.VALUE
função, conforme ilustrado no seguinte exemplo:Ao executar a consulta SQL acima mencionada no Oracle, obteremos o seguinte conjunto de resultados:
servidor SQL
No SQL Server, você precisa usar a
NEWID
função, conforme ilustrado no seguinte exemplo:Ao executar a consulta SQL acima mencionada no SQL Server, obteremos o seguinte conjunto de resultados:
PostgreSQL
No PostgreSQL, você precisa usar a
random
função, conforme ilustrado no seguinte exemplo:Ao executar a consulta SQL acima mencionada no PostgreSQL, obteremos o seguinte conjunto de resultados:
MySQL
No MySQL, você precisa usar a
RAND
função, conforme ilustrado no exemplo a seguir:Ao executar a consulta SQL acima mencionada no MySQL, obteremos o seguinte conjunto de resultados:
fonte
Se você estiver usando uma tabela grande e quiser acessar 10% dos dados, execute o seguinte comando:
SELECT TOP 10 PERCENT * FROM Table1 ORDER BY NEWID();
fonte