我使用的是MSSQL Server 2005。在我的db中,我有一个表“customerNames”,它有两列“Id”和“名称”和大约。1000年的结果。

我正在创建一个功能,每次都必须随机选择5个客户。谁能告诉我如何创建一个查询,将获得随机5行(Id,和名称)每次查询执行时?


当前回答

SELECT TOP 5 Id, Name FROM customerNames
ORDER BY NEWID()

也就是说,每个人似乎都来这一页寻找你问题的更一般的答案:

在SQL中随机选择一行

用MySQL随机选择一行:

SELECT column FROM table
ORDER BY RAND()
LIMIT 1

使用PostgreSQL随机选择一行:

SELECT column FROM table
ORDER BY RANDOM()
LIMIT 1

使用Microsoft SQL Server随机选择一行:

SELECT TOP 1 column FROM table
ORDER BY NEWID()

使用IBM DB2选择一个随机行

SELECT column, RAND() as IDX 
FROM table 
ORDER BY IDX FETCH FIRST 1 ROWS ONLY

使用Oracle随机选择一条记录:

SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 1

使用sqlite随机选择一行:

SELECT column FROM table 
ORDER BY RANDOM() LIMIT 1

其他回答

也许这个网站会有帮助。

对于那些不想点击浏览的人:

SELECT TOP 1 column FROM table
ORDER BY NEWID()

如果你有一个有数百万行的表,并且关心性能,这可能是一个更好的答案:

SELECT * FROM Table1
WHERE (ABS(CAST(
  (BINARY_CHECKSUM
  (keycol1, NEWID())) as int))
  % 100) < 10

https://msdn.microsoft.com/en-us/library/cc441928.aspx

SELECT TOP 5 Id, Name FROM customerNames ORDER BY NEWID()

如果你使用的是一个大表,想要访问10%的数据,那么运行下面的命令:SELECT TOP 10% * FROM Table1 ORDER BY NEWID();

如果有人想要PostgreSQL解决方案:

select id, name
from customer
order by random()
limit 5;