sql >> データベース >  >> RDS >> Mysql

MySQLでN行ごとに取得する方法

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

    1. datetime column=todayである行を取得します-SQLサーバーnoob

    2. psql \copymeta-commandでエラーを無視する方法

    3. テーブル式の基礎、パート10 –ビュー、SELECT *、およびDDLの変更

    4. SQLテーブルからSQLでピボットビューを作成する