-1

我有一个数据库,其中包含 100 个具有不同 employee_ID 和 Salary 的表。数据库中的总行数为 1 亿(100 个表中所有行的总和)。这些表的行数不相等。假设这 100 张桌子是按地区划分的。我想从所有桌子上返还前 10% 的薪水。怎么做到呢?

4

1 回答 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 回答