select n random rows per specified group

前端 未结 3 1601
独厮守ぢ
独厮守ぢ 2020-12-10 19:53

I am struggling to find an optimal solution for the following problem. Suppose I have a table \'Table\' like this:

id    name    report_id
 1    name1    1
          


        
相关标签:
3条回答
  • 2020-12-10 20:33

    Try this:

      SELECT
        id, 
        name,
        report_id
      FROM
      (
        SELECT id,
            report_id,
            name,
            CASE WHEN @name != name THEN @rn := 1 ELSE @rn := @rn + 1 END rn,
            @name:=name
         FROM (SELECT * FROM tbl ORDER BY RAND()) a,
            (SELECT @rn:=0, @name := NULL) r
         ORDER BY name
      ) s
      WHERE rn <= 10;
    

    SQL FIDDLE DEMO

    0 讨论(0)
  • 2020-12-10 20:38

    SQLFiddle demo

    select ID,NAME,REPORT_ID
    from
    (
    select *, @row:=if(name=@name,@row,0)+1 as rn, @name:=name from 
    (select *,RAND() as trand from t) t1,
    (select @row:=0,@name:='') tm2 
    order by name,trand
    ) t2
    where rn<=10
    
    0 讨论(0)
  • 2020-12-10 20:42

    This doesn't work in mysql, but in psql you can use partition by

    select name,report_id from
    (select name,report_id,row_number()
    over
    (partition by name order by random())
    as rn from Table) a
    where rn<=10
    

    I had this same question and found this answer from a colleague.

    0 讨论(0)
提交回复
热议问题