每两个列的组合(一个表)获得一个随机记录

时间:2012-09-04 15:40:27

标签: sql oracle select random

我有这张桌子

rss_user。您可以看到帐户名称,应用程序名称和应用程序类型。

与     RSS_USER_NAME RSS_NAME RSS_TYPE

示例数据

tom@gmail.com   webapp4     webapps
tom@gmail.com   webapp6     webapps
tom@gmail.com   mswin3      windows
tom@gmail.com   mswin2      windows
sakur@gmail.com mswin2      windows
sakur@gmail.com webapp6     webapps

我希望从rss_name和rss_type的组合中获得一个随机帐户。 rss_name和rss_type的每个组合都应该有一个随机帐户。

当前代码。完全没用: - (

SELECT *
  FROM (  SELECT    'SYNC rss_user WITH rss_user_name = "'
             || RSS_USER_NAME
             || '" , rss_name = "'
             || RSS_NAME
             || '" , rss_type = "'
             || RSS_TYPE
             || '";'
        FROM rss_user
    ORDER BY DBMS_RANDOM.VALUE)
 WHERE ROWNUM = 1

结果:

SYNC rss_user WITH rss_user_name = "tom@gmail.com" , rss_name = "webapp4" , rss_type = "webapps";

2 个答案:

答案 0 :(得分:2)

这是一种方法:

SELECT *
  FROM (SELECT    'SYNC rss_user WITH rss_user_name = "'
             || RSS_USER_NAME
             || '" , rss_name = "'
             || RSS_NAME
             || '" , rss_type = "'
             || RSS_TYPE
             || '";',
                 seqnum = row_number() over (partition by rss_name, rss_type order by dbms_random.value)
         FROM rss_user
        ) t
 WHERE seqnum = 1

也就是说,使用row_number()和dbms_random.value来选择一个随机行。

答案 1 :(得分:0)

This是关于如何逐行生成随机数的很好的讨论。一旦你理解了如何做到这一点,你就可以这样做(伪代码):

select rss_name, rss_type, max(rand) from
(select rss_name, rss_type, <random number> as rand from rss_user) a
group by rss_name, rss_type