我有这张桌子
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";
答案 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