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

グループごとにN個のランダムレコードを選択します

    わかりやすくするために、手順からタベラとカンポのパラメーターを削除しました。きっと持ち帰ることができます。

    delimiter //
    drop procedure if exists casualiPerGruppo //
    create procedure casualiPerGruppo(in numPerGruppo int)
    begin
    declare valore int;
    declare finite int default 0;
    declare query_part varchar(200);
    declare query_union varchar(2000);
    declare cur_gruppi cursor for select distinct id_gruppo from prova;
    declare continue handler for not found set finite = 1;
    
    create temporary table resultset (id int, id_gruppo int, altro varchar(10));
    
    set @query_part = 'select id, id_gruppo, altro from (select id, id_gruppo, altro from prova where id_gruppo = @id_gruppo order by rand() limit @numPerGruppo) [email protected]_gruppo';
    set @query_part = replace(@query_part, '@numPerGruppo', numPerGruppo);
    set @query_union = '';
    
    open cur_gruppi;
    mio_loop:loop
    fetch cur_gruppi into valore;
        if finite = 1 then
            leave mio_loop;
        end if;
    
    set @query_union = concat(@query_union, concat(' union ', @query_part));
    set @query_union = replace(@query_union, '@id_gruppo', valore);
    
    end loop;
    close cur_gruppi;
    
    set @query_union = substr(@query_union, 8);
    set @query_union = concat('insert into resultset ', @query_union);
    
    prepare stmt from @query_union;
    execute stmt;
    deallocate prepare stmt;
    select * from resultset order by id_gruppo, altro;
    drop table resultset;
    
    end //
    delimiter ;
    


    1. MySQLは今月のみですか?

    2. 1つを超えるテーブル全体でのMySQL全文検索

    3. Laravelに存在しない場所

    4. cx_Oracleを使用して変数をテーブル名にバインドする