首页 > 解决方案 > MySQL中列之间的随机引用

问题描述

我想在 MySQL 中随机化一个组成的数据集。数据如下所示:

|---------|--------|
|Column 1 |Column 2|
|---------|--------|
|   A     |   1    |
|---------|--------|
|   B     |   2    |
|---------|--------|
|   C     |   3    |
|---------|--------|

...在洗牌后应该是这样的:

|---------|--------|
|Column 1 |Column 2|
|---------|--------|
|   C     |   2    |
|---------|--------|
|   A     |   3    |
|---------|--------|
|   B     |   1    |
|---------|--------|

是否有一个简单的功能可以做到这一点?仅找到 RAND(),但在这种情况下,使用现有(“真实”)引用以随机顺序选择它们是不够的。

提前致谢!

标签: mysql

解决方案


WITH 
cte1 AS ( SELECT column1, ROW_NUMBER() OVER (ORDER BY RAND()) rn FROM src_table ),
cte2 AS ( SELECT column2, ROW_NUMBER() OVER (ORDER BY RAND()) rn FROM src_table )
SELECT cte1.column1, cte2.column2
FROM cte1
JOIN cte2 USING (rn)

小提琴

每列值分别随机枚举,然后通过这些随机数将值组合成对。


推荐阅读