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