MySQLでn番目ごとの行を取得したり、テーブル内でn番目ごとの行を返したりする必要がある場合があります。この記事では、MySQLのn行ごとに選択する方法を見ていきます。
MySQLでN行ごとに取得する方法
テーブル内のすべてのN行を取得する2つの方法を見ていきます。連続番号を含む列のようなIDがある場合と、ない場合です。
次の表があるとしますsales(id、amount) 。最初の例では、id列に連続する行ID – 1、2、3、…
が含まれていますmysql> create table sales(id int, amount int); mysql> insert into sales(id,amount) values(1,100), (2,300), (3,250), (4,150), (5,200); mysql> select * from sales; +----+--------+ | id | amount | +----+--------+ | 1 | 100 | | 2 | 300 | | 3 | 250 | | 4 | 150 | | 5 | 200 | +----+--------+
ボーナスリード:既存のテーブルに自動インクリメントを追加する方法
これは、MySQLのn行ごとに選択するSQLクエリです。
mysql> select * from table_name where table_name.id mod n = 0;
上記のクエリでは、基本的に id mod nのすべての行を選択します。 値はゼロと評価されます。したがって、IDがn、2n、3n、…の行を取得します。 table_nameを置き換えます。 テーブル名と、戻りたいn行ごとにnを指定します。
これは、salesテーブルから2行ごとに返す例です。
mysql> select * from sales where sales.id mod 2 = 0; +----+--------+ | id | amount | +----+--------+ | 2 | 300 | | 4 | 150 | +----+--------+
ボーナスリード:MySQLでn番目の行を見つける方法
テーブルに連続番号が格納されたIDのような列がない場合は、テーブルからn行ごとに取得するSQLクエリを次に示します。
次のテーブルがあるとしますsales(order_date、amount) IDのような列はありません。
mysql> create table sales2(order_date date, amount int); mysql> insert into sales2(order_date,amount) values('2020-10-01',100), ('2020-10-02',300), ('2020-10-03',250), ('2020-10-04',150), ('2020-10-05',200); mysql> select * from sales2; +------------+--------+ | order_date | amount | +------------+--------+ | 2020-10-01 | 100 | | 2020-10-02 | 300 | | 2020-10-03 | 250 | | 2020-10-04 | 150 | | 2020-10-05 | 200 | +------------+--------+
ボーナスリード:MySQLデータベースを別のサーバーに複製する方法
MySQLのn行ごとに取得するSQLクエリは次のとおりです。
SELECT * FROM ( SELECT @row := @row +1 AS rownum, [column name] FROM ( SELECT @row :=0) r, [table name] ) ranked WHERE rownum % [n] = 0
上記のクエリで、[n]を取得するn番目の行に置き換え、[table name]をテーブル名に、[columnname]を列名に置き換えます。
上記のクエリでは、ネストされたクエリを使用します。内部クエリでは、各行の行番号を評価して割り当て、rownumという一時変数に格納します。外部クエリは、rownummodn値がゼロの行を選択します。
これは、MySQLの2行ごとに選択するSQLクエリです。
mysql> SELECT * FROM ( SELECT @row := @row +1 AS rownum, amount FROM ( SELECT @row :=0) r, sales2 ) ranked WHERE rownum % 2 = 0; +--------+--------+ | rownum | amount | +--------+--------+ | 2 | 300 | | 4 | 150 | +--------+--------+
この記事が、MySQLのn行ごとを選択するのに役立つことを願っています。
Ubiqを使用すると、データを簡単に視覚化し、リアルタイムのダッシュボードで監視できます。 Ubiqを無料でお試しください。