用于从每个类别中随机选择的MySql数据库查询?

用于从每个类别中随机选择的MySql数据库查询?,mysql,database,Mysql,Database,我必须从表Employees中针对每个部门名称随机选择25个条目。 例如,在表Department中有10个具有唯一id的条目。 因此,结果查询将返回25random*10=250行 到目前为止,我正在解决这个问题,但有点不对劲 Table Name : Employee +------+------+ | name | dept | +------+------+ | ABC | 1 | | BCA | 1 | | CYZ |

我必须从表Employees中针对每个部门名称随机选择25个条目。 例如,在表Department中有10个具有唯一id的条目。 因此,结果查询将返回25random*10=250行

到目前为止,我正在解决这个问题,但有点不对劲

Table Name : Employee
    +------+------+
    | name | dept |
    +------+------+
    | ABC  | 1    |
    | BCA  | 1    |
    | CYZ  | 2    |
    | CYZ  | 1    |
    | n... | n... |
    +------+------+

Table Name : Department
    +----+-----------+
    | id | dept_name |
    +----+-----------+
    | 1  | YYY       |
    | 2  | ZZZ       |
    | 3  | DDD       |
    +----+-----------+

可能如下所示:

Select * from Employee where dept in (Select id from Department) RAND;
一种选择是将每个部门的员工分组,然后使用子字符串索引将列表限制为25个条目。然后将限制值与employee表联接,如下所示:

SELECT d.id, GROUP_CONCAT(name) employee_list FROM Department d JOIN (

    SELECT name FROM EMPLOYEE e WHERE d.id = e.dept ORDER BY RAND() LIMIT 25
  ) v

  GROUP BY d.id
  LIMIT 10
工作小提琴:

注:GROUP_CONCAT的默认限制为1024,可以增加

第二个选项是为每个部门的所有员工分配行号,然后将结果限制为每个部门25个。这个不使用group_concat

工作小提琴:


注:出于演示目的,两个提琴都超过了每个部门2名员工的上限。

员工表没有idfield@Mayeulsgc对不起,我的错。我已经修复了查询,而不是RAND try order by RAND limit 10你需要使用group_Concat假装它是15 3 x 5随机行,然后看
SELECT e.* FROM Employee e
JOIN (
  SELECT SUBSTRING_INDEX(GROUP_CONCAT(eid ORDER BY RAND()), ',', 25) EmpList
  FROM Employee
  GROUP BY dept
) t
ON FIND_IN_SET(e.eid, t.EmpList)
SET @num := 0, @d_id := '';

SELECT eid, name, dept
FROM (
   SELECT e.*,
   @num := IF(@d_id = e.dept, @num + 1, 1) AS row_number,
   @d_id := e.dept AS dummy
   FROM (
     SELECT * FROM Employee ORDER BY dept, RAND()
   ) e
) t 
WHERE t.row_number <= 25