首页 > 解决方案 > 获取名称列表并将它们随机配对(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

有没有办法可以实现?

标签: sqlpresto

解决方案


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

推荐阅读