zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    动态规划(决策单调优化):BZOJ 4518 [Sdoi2016]征途
    数据结构(树链剖分,线段树):SDOI 2016 游戏
    图论(费用流):BZOJ 4514 [Sdoi2016]数字配对
    搜索(四分树):BZOJ 4513 [SDOI2016 Round1] 储能表
    数据结构(KD树):HDU 4347 The Closest M Points
    数学(逆元):BZOJ 2186: [Sdoi2008]沙拉公主的困惑
    数学:UVAoj 11174 Stand in a Line
    线性代数(矩阵乘法):POJ 2778 DNA Sequence
    线性代数(矩阵乘法):NOI 2007 生成树计数
    线性代数(矩阵乘法):POJ 3233 Matrix Power Series
  • 原文地址:https://www.cnblogs.com/yongtaiyu/p/4597011.html
Copyright © 2011-2022 走看看