Есть две таблицы, в одной контрагенты, в другой документы изготавливаемые этими контрагентами.
Необходимо вывести в отсортированном порядке контрагентов с количеством изготовленных ими документов по нескольким критериям (период дат и еще одно поле).
SELECT `o`.`id`, `o`.`organ`, `o`.`numb`, `temp`.`count`
FROM `organ` AS `o`
JOIN (
SELECT `p`.`a_organ_to_certification_rds_organ_to_certification_reg_number`, COUNT(`p`.`a_organ_to_certification_rds_organ_to_certification_reg_number`) AS `count`
FROM `parse` AS `p`
WHERE `a_new_date_begin` BETWEEN '2016.07.01' AND '2017.10.12' AND `a_reglament` = '004/2011'
GROUP BY `a_organ_to_certification_rds_organ_to_certification_reg_number`) AS `temp` ON `o`.`numb` = `temp`.`a_organ_to_certification_rds_organ_to_certification_reg_number`
ORDER BY `temp`.`count` DESC
LIMIT 0, 50
не знаю, как правильно explain вставить.
НеизвестнаяТаблица
---
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
| -: | - | - | - | - | - | - | - | -: | - |
| 1 | PRIMARY | <derived2> | ALL | \N | \N | \N | \N | 149 | Using temporary; Using filesort |
| 1 | PRIMARY | o | ALL | \N | \N | \N | \N | 862 | Using where; Using join buffer |
| 2 | DERIVED | p | ref | a_reglament,a_new_date_begin | a_reglament | 38 | | 47192 | Using where; Using temporary; Using filesort |
это получается очень долго.