sql - 获取名称列表并将它们随机配对(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);
推荐阅读
- powershell - 在多个目录中为同名文件添加前缀并将它们复制到另一个目录中
- javascript - Moment.js 以空格作为左填充而不是 0
- python - KeyError: 'args' 使用日志记录文件配置时
- tensorflow - 如果项目是简单的图像,tf.dataset.Dataset.interleave() 是否提供任何好处?
- laravel - 模型内部有条件的范围
- python - numpy 中的错误输出精度
- c++ - QListView - 如何显示子项
- sql - 添加一列计算总和为零的行数€
- python - 我正在研究一个解决方案流数据管道,它总结了用户意图并提供了对实时流数据的有效分析
- javascript - Crbug/1173575,非 JS 模块文件已弃用。chromewebdata/(索引)꞉5305:9:5551