当前位置:  开发笔记 > 后端 > 正文

如何在SQL中随机选择行?

如何解决《如何在SQL中随机选择行?》经验,为你挑选了5个好方法。

我正在使用MSSQL Server 2005.在我的数据库中,我有一个表"customerNames",它有两列"Id"和"Name"和大约.1,000个结果.

我正在创建一个功能,每次我必须随机挑选5个客户.任何人都可以告诉我如何创建一个查询,每次执行查询时将获得随机的5行(Id和Name)?



1> Curtis Taske..:
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


这在大型表上是否变得非常昂贵,其中每一行都有一个随机数,然后一个大的无索引的随机数集被排序?
+1感谢除OP的MSSQL之外添加其他数据库.
警告:对于大型数据库,此方法的性能会很差.你能想象如果数据库有一百万个条目,那么为每一行生成随机值所需的时间是多少?您可以获得更多信息和更好的替代方案[这里](https://www.warpconduit.net/2011/03/23/selecting-a-random-record-using-mysql-benchmark-results/).
+1用于直接在SO上发布答案,而不是链接到外部网站(如接受的答案),当未来的用户查看此问题时可能会失败.

2> Cody Caughla..:
SELECT TOP 5 Id, Name FROM customerNames ORDER BY NEWID()



3> 小智..:

也许这个网站会有所帮助.

对于那些不想点击的人:

SELECT TOP 1 column FROM table
ORDER BY NEWID()


应该至少用5替换1 :)

4> Barry Brown..:

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

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



5> 小智..:

这里有一个很好的Microsoft SQL Server 2005特定解决方案.处理使用大型结果集的问题(不是我知道的问题).

从大表中随机选择行 http://msdn.microsoft.com/en-us/library/cc441928.aspx

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有