1

私はこのテーブルを持っています

rss_user。アカウント名、アプリケーション名、アプリケーションタイプが表示されます。

RSS_USER_NAMERSS_NAMERSS_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の組み合わせからランダムなアカウントを1つ取得したいと思います。rss_nameとrss_typeのすべての組み合わせには、1つのランダムなアカウントが必要です。

現在のコード。完全に役に立たない:-(

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";
4

2 に答える 2

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を相互に使用して、ランダムな行を選択します。

于 2012-09-04T15:51:20.300 に答える
0

これは、行ごとに乱数を生成する方法についてのすばらしい議論です。それを行う方法を理解したら、これを行うことができます(擬似コード):

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
于 2012-09-04T15:46:40.973 に答える