我有一个数据库,其中包含 100 个具有不同 employee_ID 和 Salary 的表。数据库中的总行数为 1 亿(100 个表中所有行的总和)。这些表的行数不相等。假设这 100 张桌子是按地区划分的。我想从所有桌子上返还前 10% 的薪水。怎么做到呢?
问问题
130 次
1 回答
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
包含总行数。这可用于最终过滤器。
于 2014-07-30T11:29:54.060 回答