sql >> データベース >  >> RDS >> Mysql

MySqlで列をシャッフルする方法

    気にしない場合は、一部のテーブルデータを処理できません (テーブルのサイズによって異なりますが、50%の行は処理できないと予想されます)、解決策は次のとおりです:

    元のテーブル

    id  name
    1   Some
    2   Body
    3   Once
    4   Told
    5   Me
    6   The
    7   World
    8   Is
    9   Gonna
    10  Roll
    11  Me
    12  I 
    13  Ain't
    14  The 
    15  Shapest
    16  Tool
    17  In
    18  The
    19  Shed
    20  She
    21  was
    22  looking
    23  kind
    24  of
    25  dumb
    26  with
    27  her
    28  finger
    29  and
    30  her
    31  thumb
    

    クエリ:

    SELECT new_id, name FROM (
        SELECT  new_id, name FROM (
            SELECT new_meme.id as new_id, original_meme.id as original_id, original_meme.name FROM meme original_meme
            JOIN meme new_meme ON new_meme.id <>  original_meme.id
            ORDER BY RAND()
        ) layer1
        GROUP BY layer1.new_id
    ) layer2 GROUP BY name
    

    結果(もちろん実行ごとに異なります)

    1   I 
    2   In
    3   Gonna
    4   Ain't
    5   The
    6   her
    7   finger
    8   Some
    9   dumb
    10  She
    15  Me
    16  with
    17  Told
    18  and
    19  World
    21  Roll
    22  The 
    25  Tool
    26  Shed
    27  Is
    28  Me
    29  Sharpest
    31  The
    

    注:クエリが非常に遅い場合があります 、これはテーブルに2回参加するためです。 したがって、データサイズが1000の場合、1000*1000を処理する必要があります。

    ON new_meme.id <> original_meme.idを変更することで、クエリの速度を制御できます。 ON new_meme.id BETWEEN original_meme.id - 5 AND original_meme.id +5 (5は変更できます)が、ランダム性が低下し、非数値IDでは機能しません



    1. Rails on OSX 10.11 El Capitan:ライブラリがロードされていません:libmysqlclient.18.dylib

    2. PHP/MySQLの日付/時刻の違い

    3. SQL Server Parallel Backup Restore -2

    4. ETLとELT:私たちは、あなたが判断する立場にあります