Search code examples
mysqlrandomsql-order-by

Select with random ORDER in MySQL Within 1 row


I Have this Level 1 table enter image description here I want to make query, when the query is execute the order of J1,J2.. J5 is in random order

I have this query

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

but it only randomize the index row, not the inside image result

I want to make this result with random column order, but cant figure it out yet I hope this result


Solution

  • I have a feeling this should be a duplicate but can't find one so..unpivot using union all , allocate a random row number then aggregate

    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