MySQLでテーブルの値からランダムに2件のレコードを取得する方法
MySQLでランダムにレコードを抽出するには、ORDER BY RAND()を使用します。さらに、取得する件数を2件に限定したい場合は、LIMIT 2を組み合わせることで実現できます。
この記事では、実際にテーブルを作成し、ランダムに2つの値を取得する手順を具体的な例とともに解説します。
サンプルテーブルの作成
まず、質問文を格納するテーブルを作成しましょう。
mysql> create table DemoTable1815
(
Question text
);
Query OK, 0 rows affected (0.00 sec)テストデータの挿入
次に、INSERT文を使っていくつかのレコードを挿入します。
mysql> insert into DemoTable1815 values('What is your name?');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1815 values('What is your college name?');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1815 values('What is your nick name?');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1815 values('What is your enemy name?');
Query OK, 1 row affected (0.00 sec)登録データの確認
SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認します。
mysql> select * from DemoTable1815;
このクエリを実行すると、以下のような結果が出力されます。
+----------------------------+ | Question | +----------------------------+ | What is your name? | | What is your college name? | | What is your nick name? | | What is your enemy name? | +----------------------------+ 4 rows in set (0.00 sec)
ランダムに2件だけ取得するクエリ
いよいよ本題です。レコードをランダムに並べ替え、その中から2件のみを取得するには、以下のようにORDER BY RAND()とLIMIT 2を組み合わせます。
mysql> select * from DemoTable1815 order by rand() limit 2;
実行結果は以下のとおりです。実行するたびに選ばれるレコードが変わります。
+----------------------------+ | Question | +----------------------------+ | What is your college name? | | What is your enemy name? | +----------------------------+ 2 rows in set (0.00 sec)
ポイント解説
- ORDER BY RAND(): 各行に対してランダムな値を生成し、その値をもとにソートを行います。これにより、行の順序が毎回ランダムになります。
- LIMIT 2: ソート後の結果セットから先頭の2件だけを返します。数値を変更すれば、任意の件数を取得できます。
なお、ORDER BY RAND()は全行に対してソート処理を行うため、非常に大きなテーブルではパフォーマンスが低下する場合があります。小規模〜中規模のテーブルでの利用に適しています。
-
MySQLでテーブルの重複を除いたレコードから平均値を取得するクエリの書き方
MySQLで平均値を求めるには AVG() 関数を使用します。さらに DISTINCT と組み合わせることで、重複しているレコードを除外した状態で平均を計算することができます。この記事では、実際にサンプルテーブルを作成しながら、個別(ユニーク)なレコードから平均値を取得する方法を解説します。サンプルテーブルの作成まず、以下のクエリでテーブルを作成します。mysql> create table DemoTable1934 ( StudentName varchar(20), StudentMarks int ); Query OK, 0 rows affec
-
MySQLで値が「0」の場合に別の列から値を取得する方法
MySQLで値が「0」の場合に別の列から値を取得する方法MySQLでは、IF()関数を使用することで、特定の列の値が「0」だった場合に、別の列の値を代わりに取得できます。条件分岐を1つのクエリ内で簡単に実現できる便利な関数です。IF()関数の基本構文select IF(yourColumnName1=0,yourColumnName2,yourColumnName1) as anyAliasName from yourTableName;この構文では、最初の列の値が「0」であれば2番目の列の値を返し、「0」以外であれば最初の列の値をそのまま返します。サンプルテーブルの作成まず、動作確認用のテー