order by newid() 随机查询
2015-06-24 10:24
387 查看
在日常作业中,有时候可能是一些活动要抽出得奖人或选出抽查的一些名单, 就常常会使用到 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
「如果已指定 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
相关文章推荐
- ByteArrayOutputStream(字节数组输出流)的一个例子,与ByteArrayInputStream作一比较
- android 实现调查问卷-单选-多选
- XSD基础-简易元素的定义
- ssm前台向后台传值,后台接收
- spring的IOC、AOP的使用场景
- 记录使用了jquery uploadify flash版插件的页面在chrome浏览器崩溃问题的解决方法
- 经验分享:一个产品经理花50万及半年时间买的教训
- 英语 用on还是/at/还是in
- 如何做一个高权重的网站-成都企业网站建设
- previous operation has not finished
- 抓住响应式网站核心 提升企业网站交互性能
- Android基础——HTML网页源码的获取
- TCP服务器端和客户端程序设计
- 腾讯资深产品经理谈敏捷开发于游戏
- 安装配置PhoneGap开发环境(二)——使用Cordova代替PhoneGap创建项目
- 字体属性及测量(FontMetrics)
- CheeseZH: Stanford University: Machine Learning Ex1:Linear Regression
- 6月第3周全球域名注册商(国际域名)新增注册量TOP10
- 戴尔dell服务器如何进入BIOS及恢复BIOS出厂设置
- 一款WP小游戏代码分享