1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-26

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

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

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

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?