order by newid() 随机查询

在日常作业中,有时候可能是一些活动要抽出得奖人或选出抽查的一些名单,  就常常会使用到 Order BY Newid() 的方式来做随机数选出,  但有可能的状况需是要搭配到 DISTINCT 来选出,这时候如 DISTINCT 与 Order By Newid()  同时使用就会遇到错误讯息

「如果已指定 SELECT DISTINCT,则 ORDER BY 项目必须显示于选取列表中」。  以下这个范例,就分享一个最简单的处理办法。  这边范例的数据库是使用 章立民 老师书中的范例中文北风数据库,  透过用中文的范例数据库,让大家可以比较亲近一些,来了解这个范例的效果。  如果想在这群 DISTINCT 数据中随机数选初10笔,  则你有可能会直接联想到使用  SELECT DISTINCT 员工编号,送货城市  FROM dbo.订货主档  Order by newid()  当然因为 DISTINCT 内在最筛选数据时,没有 newid() 则一定会发生  「如果已指定 SELECT DISTINCT,则 ORDER BY 项目必须显示于选取列表中」。  那有可能就会想说,把 newid() 加进去SELECT 里面,这样Order BY 就没问题了,  这样使用的话,效果可能你会发现是跟全部SELECT一样的效果。

所以说的那么多,解决的方法是什么呢?  就是把 DISTINCT(筛选) 与 Order By Newid() 随机数排序分成两个查询,在组合在一起,

SELECT TOP 10  *  FROM — 仿真一个数据表  (  SELECT DISTINCT 员工编号,送货城市  FROM dbo.订货主档  ) AS 虚构出来的数据表  Order by newid()

就透过先筛选的子查询,在使用 newid() 就能过将这样的功能轻松的做出来

SQL Server:

Select TOP N * From TABLE Order By NewID()   view plaincopy to clipboardprint? Select TOP N * From TABLE Order By NewID()

Select TOP N * From TABLE Order By NewID() NewID()函数将创建一个 uniqueidentifier 类型的唯一值。上面的语句实现效果是从Table中随机读取N条记录。

Access:

Select TOP N * From TABLE Order By Rnd(ID)    view plaincopy to clipboardprint? Select TOP N * From TABLE Order By Rnd(ID)

Select TOP N * From TABLE Order By Rnd(ID) Rnd(ID) 其中的ID是自动编号字段,可以利用其他任何数值来完成,比如用姓名字段(UserName)

Select TOP N * From TABLE Order BY Rnd(Len(UserName))   view plaincopy to clipboardprint? Select TOP N * From TABLE Order BY Rnd(Len(UserName))

Select TOP N * From TABLE Order BY Rnd(Len(UserName))

MySql:

Select * From TABLE Order By Rand() Limit 10   view plaincopy to clipboardprint? Select * From TABLE Order By Rand() Limit 10

Select * From TABLE Order By Rand() Limit 10

postgreSQL:

select * from glxt022 order by random() limit 5   view plaincopy to clipboardprint? select * from glxt022 order by random() limit 5

时间: 2024-10-05 03:14:49

order by newid() 随机查询的相关文章

sql随机查询数据order by newid()

方法1:最普通的写法,性能慢 SELECT top 10 ID,name FROM dt_keyword ORDER BY NEWID() 方法2:性能还可以 //先给数据库增加一列ALTER TABLE dt_keyword ADD SortKey AS NEWID() //查询时执行下边sql SELECT top 10 ID,name FROM dt_keyword WHERE SortKey LIKE 'A%B%C%D%E%F%' 方法3:效率还好,含sql2008以上支持 SELECT

sql随机查询数据语句(NewID(),Rnd,Rand(),random())

SQL Server: 代码如下 复制代码 Select TOP N * From TABLE Order By NewID() NewID()函数将创建一个 uniqueidentifier 类型的唯一值.上面的语句实现效果是从Table中随机读取N条记录. Access: 代码如下 复制代码 Select TOP N * From TABLE Order By Rnd(ID) Rnd(ID) 其中的ID是自动编号字段,可以利用其他任何数值来完成,比如用姓名字段(UserName) Se(ww

SQL查询显示行号、随机查询、取指定行数据

1.显示行号 如果数据没有删除的情况下主键与行号是一致的,但在删除某些数据,行号就与主键不一致了,这时需要查询行号就需要用新的方法,在SQL Server2005之前,需要使用临时表,但在SQL Server2005中,使用ROW_NUMBER()非常方便. select row_number() over (order by UseriD) as rowNum,* from UserInfo 查询结果: 2.随机查询 有的时候我们需要查询出的数据是随机排序的,newid()函数在扫描每条记录时

PHP-- 三种数据库随机查询语句写法

1. Oracle,随机查询查询语句-20条 select * from (  select  *  from 表名 order by dbms_random.value ) where rownum <= 20; 2.MS SQL Server,随机查询语句-20条 select top 20  * from  表名order by newid() 3.My SQL:,随机查询语句-20条 select  *  from  表名 order by rand() limit 20

mysql_oracle_随机查询几条记录

数据库的随机查询SQL 1. Oracle,随机查询20条 select * from ( select  *  from 表名 order by dbms_random.value ) where rownum <= 20; 2.MS SQL Server,随机查询20条 select top 20  * from  表名order by newid() 3.My SQL:,随机查询20条 select  *  from  表名 order by rand() limit 20 随机查询指定人

在SELECT DISTINCT 状况下使用 Order BY Newid() 随机数选出记录

在日常作业中,有时候可能是一些活动要抽出得奖人或选出抽查的一些名单,?就常常会使用到 Order BY Newid() 的方式来做随机数选出,?但有可能的状况需是要搭配到 DISTINCT 来选出,这时候如 DISTINCT 与 Order By Newid()?同时使用就会遇到错误讯息 「如果已指定 SELECT DISTINCT,则 ORDER BY 项目必须显示于选取列表中」.?以下这个范例,就分享一个最简单的处理办法.?这边范例的数据库是使用 章立民 老师书中的范例中文北风数据库,?透过

mysql随机查询记录的高效率方法

mysql使用rand随机查询记录的高效率方法 一直以为mysql随机查询几条数据,就用 SELECT * FROM `table` ORDER BY RAND() LIMIT 5 就可以了. 但是真正测试一下才发现这样效率非常低.一个15万余条的库,查询5条数据,居然要8秒以上 查看官方手册,也说rand()放在ORDER BY 子句中会被执行多次,自然效率及很低. You cannot use a column with RAND() values in an ORDER BY clause

SQL_随机查询

select top 3 * from Students order by NEWID() ps:newid()的返回值 是uniqueidentifier,newid()在扫描每条记录的时候都生成一个值, 而生成的值是随机的, 没有大小写顺序. 所以最终结果再按这个排序, 排序的结果当然就是无序的了

ORACLE随机查询

1. select * from (select * from tablename order by dbms_random.value) where rownum< N; 注:dbms_random是一个可以生成随机数值或者字符串的程序包.value()是最常用的,value()的用法一般有两个种,第一 function value return number; 这种用法没有参数,会返回一个具有38位精度的数值,范围从0.0到1.0,但不包括1.0.如下示例:dbms_output.put_l