MySQLで結果セットの行や値をランダムに並べ替える方法:ORDER BY RAND()の使い方
MySQLでは、RAND()関数をORDER BY句と組み合わせて使用することで、結果セットに含まれる行や値のセットをランダムな順序で表示できます。
ここでは、以下のようなレコードを持つテーブル「Employee」を例に、その動作を確認してみましょう。
mysql> Select * from employee; +----+--------+--------+ | ID | Name | Salary | +----+--------+--------+ | 1 | Gaurav | 50000 | | 2 | Rahul | 20000 | | 3 | Advik | 25000 | | 4 | Aarav | 65000 | | 5 | Ram | 20000 | | 6 | Mohan | 30000 | | 7 | Aryan | NULL | | 8 | Vinay | NULL | +----+--------+--------+ 8 rows in set (0.00 sec)
ORDER BY RAND()で行をシャッフルする
次のクエリのように、ORDER BY RAND() を指定すると、結果セット内の行が実行ごとにランダムな順序で並べ替えられます。
mysql> Select * from Employee ORDER BY RAND(); +----+--------+--------+ | ID | Name | Salary | +----+--------+--------+ | 4 | Aarav | 65000 | | 1 | Gaurav | 50000 | | 3 | Advik | 25000 | | 7 | Aryan | NULL | | 6 | Mohan | 30000 | | 8 | Vinay | NULL | | 5 | Ram | 20000 | | 2 | Rahul | 20000 | +----+--------+--------+ 8 rows in set (0.00 sec)
仕組みのポイント
RAND() は各行に対して0以上1未満のランダムな浮動小数点値を生成し、その値に基づいてソートが行われます。そのため、クエリを実行するたびに異なる順序で結果が返されるのが特徴です。
また、テーブルからランダムに1件だけレコードを取得したい場合は、LIMIT 句を組み合わせると便利です。
mysql> Select * from Employee ORDER BY RAND() LIMIT 1;
このように書くことで、全行の中からランダムに選ばれた1件のレコードのみが返されます。くじ引き的なデータ抽選や、テスト用のサンプルデータ抽出などに活用できます。
-
MySQLで行の値を合計して結果を並べ替えるクエリの書き方
MySQLで行の値を合計し、結果を並べ替える方法テーブル内の同じキーを持つ行の値を合計し、その結果を並べ替えたい場合には、GROUP BY句とORDER BY句を組み合わせて使用します。GROUP BYで対象の列ごとにデータをグループ化し、SUM関数で合計値を算出した後、ORDER BYで並べ替えるという流れになります。ここでは、生徒名と点数が登録されたテーブルを例に、生徒ごとの合計点を降順で取得する手順を解説します。1. サンプルテーブルを作成するまず、CREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1499 &nb
-
MySQLで結果セットを指定した順序どおりに取得する方法
MySQLでIN句を使ってレコードを取得すると、通常はテーブル内の格納順どおりに結果が返されます。しかし、「指定した値の並び順どおりに結果セットを取得したい」というケースもあります。そんなときは、FIND_IN_SET()関数とORDER BY句を組み合わせることで簡単に実現できます。サンプルテーブルを作成するまず、動作確認用のテーブルを作成します。mysql> create table DemoTable1563 -> ( -> StudentId int, -> StudentName varchar(20) -> );Query OK