列出姓名并随机配对 (SQL)

Take a list of names and randomly pair them off (SQL)

我正在尝试做一些我认为相当容易的事情,但现在我差点把头从桌子上撞下来!

我有一个名称列表作为数组,我想从该列表中创建随机对。

所以我有

  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

有什么方法可以实现吗?

使用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);