Извлечение топ-10 процентов из 100 различных таблиц с использованием sql

У меня есть база данных, которая содержит 100 таблиц с различными employee_ID и Salary. общее количество строк в базе данных составляет 100 миллионов (сумма всех строк в 100 таблицах). Таблицы не имеют одинакового количества строк. скажем, 100 таблиц в соответствии с регионами. Я хочу вернуть 10 % зарплат со всех столов. Как это можно сделать?

1 ответ

Во-первых, наличие нескольких таблиц с одинаковыми форматами является признаком плохого дизайна базы данных в целом. Лучше иметь одну таблицу со всеми строками.

Во-вторых, сотня таблиц начинает входить в пределы того, что могут обрабатывать запросы 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 содержит общее количество строк. Это может быть использовано для окончательного фильтра.

Другие вопросы по тегам