mysql order by newid_order by newid() 随机查询

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

「如果已指定SELECT DISTINCT,则ORDER BY 项目必须显示于选取列表中」。以下这个范例,就分享一个最简单的处理办法。这边范例的数据库是使用章立民老师书中的范例中文北风数据库,透过用中文的范例数据库,让大家可以比较亲近一些,来了解这个范例的效果。17cc1d522d5ae98be40a8fd5fa90e252.png

1fc7c03f560dc5961677d59f97642c38.png 如果想在这群DISTINCT 数据中随机数选初10笔,则你有可能会直接联想到使用SELECT DISTINCT 员工编号,送货城市FROM dbo.订货主档Order by newid()  当然因为DISTINCT 内在最筛选数据时,没有newid() 则一定会发生「如果已指定SELECT DISTINCT,则ORDER BY 项目必须显示于选取列表中」。17c79e65a465c1fea38b4499e6f374f4.png

186f6515915f0440f1aa611d8b6243ff.png 那有可能就会想说,把newid() 加进去SELECT 里面,这样Order BY 就没问题了,这样使用的话,效果可能你会发现是跟全部SELECT一样的效果。

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

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

2cdc8d49a5b7566b906dd02e2ef4cc90.png

665b43ec6c0caa6e6e19369376b0dc5b.png

就透过先筛选的子查询,在使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值