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

SQLは、年齢ごとに100のランダムな行を返します

    以下のユーザー定義変数を使用できます。クエリは、異なる年齢ごとに1つのレコードを提供します。内部クエリは、同じ年齢をチェックし、4つの同じ年齢(年齢=1)のようにランクを付けます。ランクは1,2,3になります。 、4そしてage =2の場合、ランク番号は再び1から始まり、外部クエリのフィルターは行をフィルター処理して、ランクが1である場所を示します。したがって、年齢ごとに1つの行が取得され、ランダムに並べられます。

    SELECT  c.name, c.Gender, c.Age, c.MP, c.score
    FROM (
    SELECT i.name, i.Gender, i.Age, i.MP, b.score,
    @r:= CASE WHEN @g = i.Age THEN @r + 1 ELSE 1 END rownum,
    @g:=i.Age
    FROM i
    INNER JOIN b ON b.name=i.name
    CROSS JOIN(SELECT @g:=NULL ,@r:=0) a
    WHERE i.MP='F' AND i.gender='F' AND b.score<=-1
    ORDER BY  i.Age, RAND()
    ) c
    WHERE c.rownum = 1
    ORDER BY c.Age
    LIMIT 100
    

    結合されたクエリが結果を次のように与えると仮定しましょう

    サンプルデータセット

    name   gender  Age  Mp score
    ============================
    test1  male    1    1   10
    test2  male    1    1   10
    test3  male    1    1   10
    test4  male    2    1   10
    test5  male    2    1   10
    test6  male    3    1   10
    test7  male    4    1   10
    test8  male    4    1   10
    .....
    

    今、私の答えで内部クエリを使用すると、以下のようなランク列の結果セットが得られます

    内部クエリ結果セット

    name   gender  Age  Mp score rank
    ==================================
    test2  male    1    1   10    1
    test1  male    1    1   10    2
    test3  male    1    1   10    3
    test4  male    2    1   10    1
    test5  male    2    1   10    2
    test6  male    3    1   10    1
    test7  male    4    1   10    1
    test8  male    4    1   10    2
    

    上記の結果セットのように、age =1の場合は3行で、ランクが異なります1,2,3年齢の場合は同じ例=2ランクはage=4の場合は1,2同じです。私の答えでは、外部クエリは次のようになります。ランク=1の結果を除外して、以下の結果セットを参照して、最終結果セットに個別の行ごとに1つの行が含まれるようにします

    最終出力

    name   gender  Age  Mp score rank
    ==================================
    test2  male    1    1   10    1
    test4  male    2    1   10    1
    test6  male    3    1   10    1
    test7  male    4    1   10    1
    

    ランダムな順序付けの部分は、部分ごとの順序を確認できるように、内部クエリで実行されますORDER BY i.Age, RAND() 最初に年齢を昇順で並べ替え、次に同じ年齢値の場合、結果をさらにランダムに並べ替えます。意味があることを願っています



    1. Oracle(11.2.0.1):UPDATEステートメントによって現在更新されている行を識別する方法

    2. 1つのクエリで複数のテーブルに挿入

    3. SQL ServerでのSCHEMA_ID()のしくみ

    4. mysqlでINDEXESを使用する最大の利点は何ですか?