当前位置:七道奇文章资讯数据防范Oracle防范
日期:2012-03-25 00:25:00  来源:本站整理

Oracle中随机获得分组中的一条记录[Oracle防范]

赞助商链接



  本文“Oracle中随机获得分组中的一条记录[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

  Oracle中随机获得分组中的一条记录

  原文是这样的:

  table A :

  title type

  BB 甲

  CC 甲

  DD 乙

  BB 乙

  -------------------------------

  查询之后要的后果是:

  title type

  BB 甲

  CC 甲

  DD 乙

  --------------------------------

  title有相同值而type不管相不相同时只随机选取一条记录

  1. 最开始,有人这样解答:

  随机?

  select title, max(type)

  from table

  group by title

  但是,这样做有一个缺陷,每次挑出来的都是按照type取最大的那一行.min也是一样原理.

  2. 改良一点的随机性:

  SQL> select title, type from a where rowid = (select max(rowid) from a b where b.title = a.title);

  TITLE TYPE

  -------------------------------- ----

  CC 甲

  DD 乙

  BB 乙

  为什么说随机性改良了一点点呢?因为这个时刻它不是以type的自然值排序,但是它实际上以伪列rowid排序,也就是说,基本上它获得的是相同title值下最后一次插入的行,不一定是最大或最小title值那一行.

  3. 利用partition解析函数

  QL> select * from (

  2 select title ,type, row_number() over(partition by title order by title) r from A

  3 ) where r = 1;

  TITLE TYPE R

  -------------------------------- ---- ----------

  BB 甲 1

  CC 甲 1

  DD 乙 1

  这与1没什么辨别,order by 的是title,获得的是最小值

  4. 改良的随机性

  select a.title, a.typefrom ( select row_number() over(partition by a1.title order by sys_guid()) rcn, a1.title, a1.type from a a1 ) awhere a.rcn=1;

  此中的sys_guid()可以换为dbms_random.random

  相信假如不用over, partition,大概还有别的办理筹划.


  以上是“Oracle中随机获得分组中的一条记录[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • SQL Server中利用Linkserver衔接Oracle的办法
  • Oracle数据库网络与安全FAQ精辟堆积
  • Ubuntu 9.10下安装Oracle10g
  • Ubuntu 10.04 下安装Oracle 11g
  • oracle盲注报错语句和oracle提权语句汇总
  • oracle中to_char、to_number、to_date的用法
  • Python模拟Oracle的SQL/PLUS工具的实现办法
  • Oracle数据库访谈之最年青的OCM访谈
  • oracle表数据误删复原
  • Oracle数据库笔记--表空间
  • Oracle数据库树形查询的代码示例
  • oracle中记录和调集
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .