Возьмите список имен и случайным образом соедините их (SQL) - PullRequest
1 голос
/ 15 января 2020

Я пытаюсь сделать что-то, что, на мой взгляд, было бы довольно легко, и сейчас я на грани того, чтобы оторвать голову от стола!

У меня есть список имен в виде массива, и я хочу создать случайные пары из этого списка.

Итак, у меня есть

  SELECT * FROM (
    VALUES
        ('Angie'),
        ('Bob'),
        ('Meg'),
        ('Colin'),
        ('Debbie'),
        ('Eddie'),
        ('Fiona'),
        ('Gary'),
        ('Harriet'),
        ('Ian'),
        ('Julie'),
        ('Kevin'),
        ('Mary'),
        ('Noah'),
        ('Olivia')
) AS t (name)enter code here

, и я хочу получить что-то вроде

   Name 1  Name2

1. Olivia Debbie
2. Gary   Harriet
3. Bob    Mary
4. Noah   Colin
5. Ian    Fiona
6. Kevin  Mary
7. Julie  Eddie
8. Angie  NULL

Есть ли способ, которым это может быть достигнуто?

1 Ответ

2 голосов
/ 15 января 2020

Использование row_number() и агрегация:

select max(case when mod(seqnum, 2) = 1 then name end) as name1,
       max(case when mod(seqnum, 2) = 0 then name end) as name2       
from (select name, row_number() over (order by random()) - 1 as seqnum
      from t
     ) t
group by floor(seqnum / 2);
...