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

Linda Hamilton
リリース: 2024-10-26 06:04:31
オリジナル
679 人が閲覧しました

 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!