我有一个数据库,其中包含100个具有不同employee_ID和Salary的表。数据库中的总行数为1亿(100个表中所有行的总和)。表没有相同的行数。让我们说100张桌子是根据地区。 我想从所有表中返回前10%的工资。怎么办呢?
答案 0 :(得分:4)
首先,具有相同格式的多个表通常是数据库设计不良的标志。最好有一个包含所有行的表。
其次,一百个表开始进入MySQL查询可以处理的限制。以下将没有很好的性能,因为它需要对所有数据进行排序,但它应该工作:
select es.*
from (select es.*, (@rn := @rn + 1) as rn
from ((select employee_id, salary from table001) union all
. . .
(select employee_id, salary, from table100)
) es cross join
(select @rn := 0) vars
order by salary desc
) t
where rn <= @rn * 0.1;
这是有效的,因为在子查询枚举了行之后,变量@rn
包含总行数。这可以用于最终过滤器。