重複データをランダムで取得するというお題があり、なかなか出てこなかったのでメモを書く
重複を抜き出すとかdistinctとかでできるのですが、
重複したデータをランダムで取得する方法が見つかりませんでした。
例えばこんな時
世界中にいる同じ苗字の人の1人から鬼ごっこの鬼を決めたい
ランダムで
佐藤さんがいっぱいいます、高橋さんがいっぱいいます、田中さんが。。。
選ばれた世界の佐藤さんの中の1人、世界の田中さんの中の1人にメールを送付しなければいけない
結論は
パフォーマンスとか気にしてないし、DB側で処理しなくてもいいなどありますが...
nayose.sql
SELECT id,苗字,名前,住所, メール
,row_number() over (partition by 苗字 order by dbms_random.random) as 当選番号
FROM 人類
WHERE 当選番号=1
解説
当選番号
当選番号をカテゴリごとにランダム付与します。今回は世界中の佐藤さんの中の一人を選ぶため1としています。
partition by
苗字で一人に絞り込み
order by dbms_random.random
苗字でカテゴライズされた人たちにランダムに番号を振ります