从表中随机返回n条记录。可以修改下面的语句,要求下次执行时产生不同的结果集?
2012-12-20 20:38
676 查看
原文地址:http://www.worlduc.com/blog2012.aspx?bid=784358
问题
从表中随机返回n条记录。可以修改下面的语句,要求下次执行时产生不同的结果集。
解决方案
使用DBMS支持的内置函数来生成随机数值。在ORDEY BY子句中使用该函数,对行进行随机排序,然后,使用前面的问题介绍的技巧,来限制所返回的顺序随机的行的数目。
DB2
使用内置函数RAND搭配使用ORDER BY和FETCH:
MySQL
使用内置函数RAND搭配使用LIMIT和ORDER BY:
PostgreSQL
使用内置函数RAND搭配使用LIMIT和ORDER BY:
Oracle
使用DBMS_RANDOM包中的内置函数VALUE,搭配使用ORDER BY和内置函数ROWNUM:
SQL Server
使用内置函数NEWID搭配使用TOP和ORDER BY返回随机结果集:
讨论
ORDER BY子句可以接受函数的返回值,并使用它来改变结果集的次序。该解决方案中,在ORDER BY子句中执行函数之后,再查询返回的行数。非Oracle用户会发现看看Oracle解决方案会很有用,可以理解解决方案的原理。
重要的是,不要把在ORDER BY子句中使用函数和使用数值常量混合起来。在ORDER BY子句中指定数值常量时,是要求根据SELECT列表中相应位置的列来排序,当在ORDER BY子句中使用函数时则按照每一行的计算结果来排序。
问题
从表中随机返回n条记录。可以修改下面的语句,要求下次执行时产生不同的结果集。
select ename, job from emp
解决方案
使用DBMS支持的内置函数来生成随机数值。在ORDEY BY子句中使用该函数,对行进行随机排序,然后,使用前面的问题介绍的技巧,来限制所返回的顺序随机的行的数目。
DB2
使用内置函数RAND搭配使用ORDER BY和FETCH:
select ename,job from emp order by rand() fetch first 5 rows only
MySQL
使用内置函数RAND搭配使用LIMIT和ORDER BY:
select ename,job from emp order by rand() limit 5
PostgreSQL
使用内置函数RAND搭配使用LIMIT和ORDER BY:
select ename,job from emp order by random() limit 5
Oracle
使用DBMS_RANDOM包中的内置函数VALUE,搭配使用ORDER BY和内置函数ROWNUM:
select *
from (
select ename, job from emp
order by dbms_random.value()
)
where rownum <= 5
SQL Server
使用内置函数NEWID搭配使用TOP和ORDER BY返回随机结果集:
select top 5 ename,job from emp order by newid()
讨论
ORDER BY子句可以接受函数的返回值,并使用它来改变结果集的次序。该解决方案中,在ORDER BY子句中执行函数之后,再查询返回的行数。非Oracle用户会发现看看Oracle解决方案会很有用,可以理解解决方案的原理。
重要的是,不要把在ORDER BY子句中使用函数和使用数值常量混合起来。在ORDER BY子句中指定数值常量时,是要求根据SELECT列表中相应位置的列来排序,当在ORDER BY子句中使用函数时则按照每一行的计算结果来排序。
相关文章推荐
- 从表中随机返回n条记录,要求下次执行时产生不同结果集
- Hibernate SQLQuery查询返回空List,在mysql命令下直接执行sql语句可以正常得到记录
- YII通过db执行sql语句可以看下面
- PHP PDO->exec() 执行无返回结果集的 SQL 语句
- 执行一条sql语句update多条不同值的记录实现思路
- PHP mysqul连接数据库,执行查询语句,打印返回结果集和断开数据库
- 渣渣用JavaScript开发的消消乐,由于没有按照正规消消乐形式生成,是随机产生图形,所以存在一个算法bug,具体看下面,高手想到可以告诉我
- iis7针对不同域名配置不同运行权限,所有共用web.config产生的问题均可以修改根配置文件解决
- 不用存储过程,如何在执行一个INSERT语句后,返回新记录的主键值。
- 有一个函数int getNum(),每运行一次可以从一个数组V[N]里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V[N]里随机
- 阿里巴巴面试算法题:有一个函数int getNum(),每运行一次可以从一个数组V[N]里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V[N]里随机取出一个数,而这个数必须是符合1/N
- 自己实现一个SQL解析引擎 功能:将用户输入的SQL语句序列转换为一个可执行的操作序列,并返回查询的结果集。 SQL的解析引擎包括查询编译与查询优化和查询的运行,主要包括3个步骤: 查询分析
- 如何使你的Sql 语句可以和null 值比较得到正确的结果,而不是永远都返回0条记录
- 用SQL语句来实现随机选定不同记录
- 由计算机产生0-9之间的随机整数,用户输入猜测的数据,统计用户猜测的次数。产生随机数可以使用Math.rangom()静态方法,该方法返回正的double类型浮点数位于(0.0 1.0】间。
- 可以方便的将SQL语句的执行结果显示成表格结果的JAVA类,可以用于不同的数据显示
- PL_SQL中执行SELECT … INTO …语句时,如果返回结果集为空
- JavaScript语句中再包括JavaScript语句串也能同样执行了.可以解决AJAX返回后的数据检查问题
- 【嵌入式系统学习记录】练习题:设计一个洗牌发牌的程序;(随机产生52个不同的数)
- 记录:java执行mysql语句查询字段类型:timestamp返回页面显示会多出个 .0,自己如何处理的