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を無料でお試しください。