没看懂你的抽取50%是什么意思,可以参考如下方案:
站在用户的角度思考问题,与客户深入沟通,找到临翔网站设计与临翔网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:做网站、成都做网站、企业官网、英文网站、手机端网站、网站推广、空间域名、虚拟空间、企业邮箱。业务覆盖临翔地区。
1:随机抽取前50条记录:
select *
from (select * from scott.emp order by dbms_random.random)
where rownum 51
2:随机取1~100之间的数据:
select dbms_random.value(1,100) from dual
真正要随机应该这样写:
select * from
(select sale_id,user_id,row_number() over (partition by sale_id order by rnv) rn
from
(select sale_id,user_id,dbms_random.value() rnv from table1
where fee=5000 and sms_fee0 and gprs_cmwap_fee0 and statis_month=201003)
)
where rn=100
order by sale_id,user_id;
--如果员工月度业务单小于3条的员工和部门
select * from talbe_name where 员工 in(
select 部门,员工,count(1) from table_name
where 结单时间开始时间
and 结单时间结束时间
group by 部门,员工
having count(1)3)
and 结单时间开始时间
and 结单时间结束时间;
--如果员工月度业务单大于3条的员工,随机抽取3条单子
select * from
(select t.*,rownum from talbe_name where 员工 in(
select 部门,员工,count(1) from table_name
where 结单时间开始时间
and 结单时间结束时间
group by 部门,员工
having count(1)3)
and 结单时间开始时间
and 结单时间结束时间
order by dbms_random.value)
where rownum3;
1、需要用到两个字符类函数instr和substr,具体用法介绍如下:
函数:字符定位函数
instr
语法:instr(待处理的字符串,需要查找的字符,开始查找的起始位置,第n次出现)
返回值:字母所在的位置,没有返回
0;
函数:字符定位函数
substr
语法:substr('要切割的值',从第几个位置开始切割,切割几位);
返回值:截取的字符串。
2、该题实现步骤,以字段a内容为'武汉一一科技公司(2009年2月注销)'为例:
第一步:先从字段a的字段第一个字符往前找左括号'('
第一次出现的位置,如下:
select
instr('武汉一一科技公司(2009年2月注销)',
'(',
1,
1)
--
9
from
dual;
第二步:从字段第一个字符开始,一直找出左括号'('的前一位就行,如下:
select
substr('武汉一一科技公司(2009年2月注销)',
1,
instr('武汉一一科技公司(2009年2月注销)',
'(',
1,
1)
-
1)
from
dual;
注:如果某某公司名称本身可能含有括号的话,建议从最后一个字符倒着往回找左括号出现第一次的位置,即
select
instr('武汉一一科技公司(2009年2月注销)',
'(',
-1,
1)
--
9
from
dual;
3、最终答案
select
select
substr(a,
1,
instr(a,
'(',
-1,
1)
-
1)
from
table
;
oracle随机读取表中的N条数据方法:
1) select * from (select * from tablename order by sys_guid()) where rownum N;
2) select * from (select * from tablename order by dbms_random.value) where rownum N;
3) select * from (select * from table_name sample(10) order by trunc(dbms_random.value(0, 1000))) where rownum N;说明:
sample(10)含义为检索表中的10%数据,sample值应该在[0.000001,99.999999]之间,其中
sys_guid()
和
dbms_random.value都是内部函数
注:
在使1)方法时,即使用sys_guid()
这种方法时,有时会获取到相同的记录,即:和前一次查询的结果集是一样的(可能是和操作系统有关:windows正常,linux异常;也可能是因为sys_guid()函数本身的问题,有待继续研究)
所以,为确保在不同的平台每次读取的数据都是随机的,建议采用2)和3)两种方案,其中2)方案更常用。3)方案缩小了查询的范围,在查询大表,且要提取数据不是很不多的情况下,会对查询速度上有一定的提高