ホームページ  >  記事  >  データベース  >  MySQL でランダムなサブセットを選択し、別の列で並べ替えるにはどうすればよいですか?

MySQL でランダムなサブセットを選択し、別の列で並べ替えるにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-26 06:04:31680ブラウズ

 How to Select a Random Subset and Then Order by Another Column in MySQL?

MySQL でのランダムな選択と順序付け

MySQL データベースにクエリを実行する場合、レコードのサブセットをランダムに選択することが一般的です。これを実現するには、ORDER BY RAND() 句を使用できます。ただし、この句を他の順序句と組み合わせる場合は、操作の順序を考慮することが重要です。

レコードのランダムなサブセットを選択し、結果のセットを別の列で並べ替えようとすると、よくある落とし穴が 1 つ発生します。次のクエリはその例です。

SELECT * FROM users WHERE 1 ORDER BY RAND(), name ASC LIMIT 20

このクエリの目的は、users テーブルから 20 人のランダムなユーザーを選択し、名前列で昇順に並べ替えることです。ただし、このクエリでは望ましい結果は得られません。

その理由は、ORDER BY RAND() 句が非決定的な順序付けを導入しているためです。これは、クエリが実行されるたびに結果の順序が変わることを意味します。その結果、後続の名前 ASC 句を使用して結果を確実に並べ替えることはできません。

結果を正しく並べ替えるには、サブクエリを使用する必要があります。次のクエリは 20 人のユーザーをランダムに選択し、名前列で並べ替えます。

SELECT * FROM 
(
    SELECT * FROM users ORDER BY RAND() LIMIT 20
) T1
ORDER BY name 

内部クエリは 20 人のユーザーをランダムに選択し、結果を一時テーブル T1 に保存します。次に、外側のクエリは T1 からすべての行を選択し、名前順に並べます。

以上がMySQL でランダムなサブセットを選択し、別の列で並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。