使用sql从100个不同的表中提取前10%

时间:2014-07-30 11:25:35

标签: mysql sql statistics mysql-variables

我有一个数据库,其中包含100个具有不同employee_ID和Salary的表。数据库中的总行数为1亿(100个表中所有行的总和)。表没有相同的行数。让我们说100张桌子是根据地区。 我想从所有表中返回前10%的工资。怎么办呢?

1 个答案:

答案 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包含总行数。这可以用于最终过滤器。