Help us understand the problem. What is going on with this article?

【DB】名寄せ?重複のランダム抽出?の際のメモ

More than 1 year has passed since last update.

重複データをランダムで取得するというお題があり、なかなか出てこなかったのでメモを書く

重複を抜き出すとか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

苗字でカテゴライズされた人たちにランダムに番号を振ります

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away