- PR -

ランダムに取得

1
投稿者投稿内容
kei111
会議室デビュー日: 2005/03/03
投稿数: 10
投稿日時: 2005-03-27 23:26
はじめまして

Oracleを使用しています。
結果に対してランダムな値を取得したいのですが、方法がわかりません。
ある条件で例えば2000件のデータを絞り込んだ後にその中から100件をランダムに選択する
といったような使い方は可能なのでしょうか?

よろしくお願いします。
syo
常連さん
会議室デビュー日: 2003/08/17
投稿数: 43
投稿日時: 2005-03-28 21:41
お世話になっております。

Oracleではありませんが、SELECT文中に乱数発生関数を追加して、そこで得られた乱数でソートさせることにより擬似的にランダムに選択させたことがあります。

(こんな感じ)
SELECT column1,column2,rand() as key FROM hoge ORDER BY key

ただ、そのDBの乱数生成がいまいちだったのか、約2万行の中に同じ乱数がいくつか出てきていました。
おふぃすこま
常連さん
会議室デビュー日: 2005/01/24
投稿数: 22
投稿日時: 2005-03-29 08:47
おふぃすこまです。

引用:

Oracleではありませんが、SELECT文中に乱数発生関数を追加して、そこで得られた乱数でソートさせることにより擬似的にランダムに選択させたことがあります。

(こんな感じ)
SELECT column1,column2,rand() as key FROM hoge ORDER BY key



たぶんMySQLですかね?私も昔使った記憶があります。

kei111さんが、どういった使用方法でデータ取得するかによりますが、
何かのアプリケーションで使用したいのなら、そのアプリ側で制御してみたらどうでしょう?

どうしてもOracleのSQLでやりたい場合・・・
初め取得した2000件を一時表に格納する。
その際、SEQ_NOといった列を追加し、その列にランダムな値を設定する。
(↑乱数を発生させる DBMS_RANDOM があります)

後はsyoさんが説明したSQLのような感じでデータを取得する。

かなり遠回りですがどうでしょう?
茶太郎
ベテラン
会議室デビュー日: 2005/02/23
投稿数: 57
投稿日時: 2005-03-29 09:03
おはようございます。

ちなみにOracleに乱数の関数は無いのでパッケージを使う事になるようですよ。
(dbms_randomというパッケージ)

select dbms_random.random() from dual;

こんな感じならどうでしょ?
----------------------------------------------------------
SELECT COLUMN1,COLUMN2 FROM
(SELECT ROWNUM AS ROW_CNT,RANDOM,COLUMN1,COLUMN2 FROM
(SELECT DBMS_RANDOM.RANDOM() AS RANDOM,COLUMN1,COLUMN2 FROM
      TABLE1,DUAL WHERE COLUMN1='xxxxxx' ORDER BY RANDOM)
)
WHERE ROW_CNT<=100
---------------------------------------------------------


[ メッセージ編集済み 編集者: 茶太郎 編集日時 2005-03-29 09:27 ]
おふぃすこま
常連さん
会議室デビュー日: 2005/01/24
投稿数: 22
投稿日時: 2005-03-29 10:18
おふぃすこまです。

select coimun1,dbms_random.random() as rnd from table1 order by rnd

なんかこれでもいけそうです。

一時表を使うとか自爆レスをしてしまった・・・(^^;
kei111
会議室デビュー日: 2005/03/03
投稿数: 10
投稿日時: 2005-04-01 01:59
お世話になっております。

おふぃすこま様、茶太郎様、syo様
返信ありがとうございます。

ちょっと忙しかったものでレスが付いていたのに気が付きませんでした。
どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)