在 MySQL 中使用随机 ORDER 选择 1 行内

问题描述 投票:0回答:1

我有这张

Level 1
桌子 enter image description here 我想做查询,查询执行时J1,J2.. J5的顺序是随机的

我有这个疑问

SELECT j1,j2,j3,j4,j5 FROM `level_1` ORDER BY RAND()

但它只随机化索引行,而不是内部 image result

我想用随机列顺序得到这个结果,但还无法弄清楚 I hope this result

mysql random sql-order-by
1个回答
0
投票

我有一种感觉,这应该是重复的,但找不到一个,所以..使用 union all 进行逆透视,分配一个随机行号,然后聚合

CREATE TABLE T (
  ID INT AUTO_INCREMENT PRIMARY KEY, J1 INT,J2 INT,J3 INT,J4 INT,J5 INT);
INSERT INTO T VALUES
(1,1,2,3,4,5),(2,10,20,30,40,50);
WITH CTE AS
(
SELECT ID,1 AS COL, J1 FROM T
UNION ALL
SELECT ID,2 AS COL, J2 FROM T
UNION ALL
SELECT ID,3 AS COL, J3 FROM T
UNION ALL
SELECT ID,4 AS COL, J4 FROM T
UNION ALL
SELECT ID,5 AS COL, J5 FROM T
),
CTE1 AS
(SELECT * ,ROW_NUMBER() OVER (PARTITION BY ID ORDER BY RAND()) RN FROM CTE)
SELECT ID,
    MAX(CASE WHEN RN = 1 THEN J1 END) COL1,
    MAX(CASE WHEN RN = 2 THEN J1 END) COL2,
    MAX(CASE WHEN RN = 3 THEN J1 END) COL3,
    MAX(CASE WHEN RN = 4 THEN J1 END) COL4,
    MAX(CASE WHEN RN = 5 THEN J1 END) COL5
FROM CTE1 
GROUP BY ID
ORDER BY ID;

https://dbfiddle.uk/kRMABZp7

© www.soinside.com 2019 - 2024. All rights reserved.