永发信息网

关于oracle中的随机选择记录的问题,

答案:2  悬赏:0  手机版
解决时间 2021-03-05 08:06
  • 提问者网友:山高云阔
  • 2021-03-05 00:02
我看大家都用以下的这个。
select * from
(
select * from tablename
where ...
order by random.value
)
where rownum <= 3

想问一下,为什么不可以用一下的这个呢?

select * from tablename
where ... and rownum <= 3
order by random.value

谢谢。
最佳答案
  • 五星知识达人网友:人间朝暮
  • 2021-03-05 01:04
执行的顺序不一样
select * from
(
select * from tablename
where ...
order by random.value
)
where rownum <= 3
先执行ORDER BY
select * from tablename
where ... and rownum <= 3
order by random.value
先执行rownum <= 3
全部回答
  • 1楼网友:街头电车
  • 2021-03-05 01:09
1楼瞎扯,你那个不是随机100行,每次运行的结果都是一样的;而且你用rank也不对,假如出现并列第100名,你那个返回的就不是100行了,应该用row_number 真正要随机应该这样写: 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_fee>0 and gprs_cmwap_fee>0 and statis_month=201003) ) where rn<=100 order by sale_id,user_id;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯