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

MYSQL各カテゴリからランダムレコードを1つ選択

    このクエリは、カテゴリに結合されたすべてのアイテムをランダムな順序で返します:

    SELECT
    c.id AS cid, c.category, i.id AS iid, i.name
    FROM categories c
    INNER JOIN items i ON c.id = i.category
    ORDER BY RAND()
    

    各カテゴリを1つに制限するには、クエリを部分的でラップします。 GROUP BY

    SELECT * FROM (
        SELECT
        c.id AS cid, c.category, i.id AS iid, i.name
        FROM categories c
        INNER JOIN items i ON c.id = i.category
        ORDER BY RAND()
    ) AS shuffled_items
    GROUP BY cid
    

    クエリに両方のGROUP BYがある場合は注意してください およびORDER BY 句では、グループ化は並べ替えの前に実行されます。これが、2つのクエリを使用した理由です。最初のクエリは結果を並べ替え、2番目のクエリは結果をグループ化します。

    このクエリがレースに勝つことはないことを理解しています。提案を受け付けています。



    1. クエリの行ごとに異なる条件を設定することは可能ですか?

    2. 値がデータベースに存在するかどうかをチェックするJava

    3. MySQL構文と「OR」パフォーマンス

    4. DISTINCT呼び出し用のPostgreSQLタイプ(ポイント)のカスタム等式演算子の作成