我使用的是MSSQL Server 2005。在我的db中,我有一个表“customerNames”,它有两列“Id”和“名称”和大约。1000年的结果。
我正在创建一个功能,每次都必须随机选择5个客户。谁能告诉我如何创建一个查询,将获得随机5行(Id,和名称)每次查询执行时?
我使用的是MSSQL Server 2005。在我的db中,我有一个表“customerNames”,它有两列“Id”和“名称”和大约。1000年的结果。
我正在创建一个功能,每次都必须随机选择5个客户。谁能告诉我如何创建一个查询,将获得随机5行(Id,和名称)每次查询执行时?
当前回答
如果有人想要PostgreSQL解决方案:
select id, name
from customer
order by random()
limit 5;
其他回答
如果你不想使用NEWID()并且主键列是int,那么你可以像这样选择一个随机的主键:
with a as
(
select count(id) as row_count
from mytable
)
select *
from mytable , a
where id = round(rand() * row_count, 0)
这里有一个很好的Microsoft SQL Server 2005特定解决方案。 处理你正在处理一个大结果集的问题(不是我知道的问题)。
从大表中随机选择行 http://msdn.microsoft.com/en-us/library/cc441928.aspx
我发现这对大数据最有效。
SELECT TOP 1 Column_Name FROM dbo.Table TABLESAMPLE(1 PERCENT);
TABLESAMPLE(n ROWS)或TABLESAMPLE(n PERCENT)是随机的,但需要添加TOP n以获得正确的样本量。
在大型表上使用newwid()非常慢。
SELECT * FROM TABLENAME ORDER BY random() LIMIT 5;
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