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

SQLのフィールド値ごとの行数を制限するにはどうすればよいですか?

    残念ながら、mysqlには分析関数がありません。したがって、変数を操作する必要があります。自動インクリメントフィールドがあるとします。

    mysql> create table mytab (
        -> id int not null auto_increment primary key,
        -> first_column int,
        -> second_column int
        -> ) engine = myisam;
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> insert into mytab (first_column,second_column)
        -> values
        -> (1,1),(1,4),(2,10),(3,4),(1,4),(2,5),(1,6);
    Query OK, 7 rows affected (0.00 sec)
    Records: 7  Duplicates: 0  Warnings: 0
    
    mysql> select * from mytab order by id;
    +----+--------------+---------------+
    | id | first_column | second_column |
    +----+--------------+---------------+
    |  1 |            1 |             1 |
    |  2 |            1 |             4 |
    |  3 |            2 |            10 |
    |  4 |            3 |             4 |
    |  5 |            1 |             4 |
    |  6 |            2 |             5 |
    |  7 |            1 |             6 |
    +----+--------------+---------------+
    7 rows in set (0.00 sec)
    
    mysql> select
        -> id,
        -> first_column,
        -> second_column,
        -> row_num
        -> from (
        -> select *,
        -> @num := if(@first_column = first_column, @num:= @num + 1, 1) as row_num,
        -> @first_column:=first_column as c
        -> from mytab order by first_column,id) as t,(select @first_column:='',@num:
    =0) as r;
    +----+--------------+---------------+---------+
    | id | first_column | second_column | row_num |
    +----+--------------+---------------+---------+
    |  1 |            1 |             1 |       1 |
    |  2 |            1 |             4 |       2 |
    |  5 |            1 |             4 |       3 |
    |  7 |            1 |             6 |       4 |
    |  3 |            2 |            10 |       1 |
    |  6 |            2 |             5 |       2 |
    |  4 |            3 |             4 |       1 |
    +----+--------------+---------------+---------+
    7 rows in set (0.00 sec)
    
    mysql> select
        -> id,
        -> first_column,
        -> second_column,
        -> row_num
        -> from (
        -> select *,
        -> @num := if(@first_column = first_column, @num:= @num + 1, 1) as row_num,
        -> @first_column:=first_column as c
        -> from mytab order by first_column,id) as t,(select @first_column:='',@num:
    =0) as r
        -> having row_num<=2;
    +----+--------------+---------------+---------+
    | id | first_column | second_column | row_num |
    +----+--------------+---------------+---------+
    |  1 |            1 |             1 |       1 |
    |  2 |            1 |             4 |       2 |
    |  3 |            2 |            10 |       1 |
    |  6 |            2 |             5 |       2 |
    |  4 |            3 |             4 |       1 |
    +----+--------------+---------------+---------+
    5 rows in set (0.02 sec)
    


    1. xmlノードから値をクエリする方法は?

    2. SQLまたはMySQLでJOINキーワードを使用しない結合に何か問題がありますか?

    3. MS AccessとMySQLの間でデータを同期するための最良の方法は何ですか?

    4. MySQLでのREGEXP_SUBSTR()関数のしくみ