Приведенный ниже запрос работает нормально, за исключением времени ответа, для извлечения записей потребуется 4 секунды, мне нужно знать лучшие практические советы, чтобы написать то же самое, поэтому время выполнения запроса улучшится.
SELECT name,loc_id,tot_emp,net_salary,gross_earn,gross_deduct,case WHEN YEAR_MONTH IS NOT NULL THEN YEAR_MONTH ELSE 'NA' END AS Month
FROM
--SELECT * FROM
(SELECT
r.NAME,
'000' loc_id,
COUNT(DISTINCT ess.employee_id) tot_emp,
SUM(CASE WHEN ess.employee_id IS NOT NULL Then ess.net_salary else 0 end) net_salary,
SUM(CASE WHEN ess.employee_id IS NOT NULL Then ess.gross_earning else 0 end) gross_earn,
SUM(CASE WHEN ess.employee_id IS NOT NULL Then ess.gross_deduction else 0 end) gross_deduct,
MAX(ess.YEAR_MONTH)YEAR_MONTH
FROM Region r
JOIN EMPLOYEE e
ON r.REGION_ID=e.REGION_ID
LEFT JOIN EMPLOYEE_SALARY_SUMMARY ess
ON ess.EMPLOYEE_ID=e.EMP_ID
WHERE e.CIRCLE_ID IS NULL
group by r.NAME, '000'
UNION
SELECT
c.name,
c.circle_id loc_id,
COUNT(DISTINCT ess.employee_id) tot_emp,
SUM(CASE WHEN ess.employee_id IS NOT NULL Then ess.net_salary else 0 end) net_salary,
SUM(CASE WHEN ess.employee_id IS NOT NULL Then ess.gross_earning else 0 end) gross_earn,
SUM(CASE WHEN ess.employee_id IS NOT NULL Then ess.gross_deduction else 0 end) gross_deduct,
MAX(ess.YEAR_MONTH)YEAR_MONTH
FROM circle c
JOIN EMPLOYEE e
ON c.CIRCLE_ID=e.CIRCLE_ID
LEFT JOIN EMPLOYEE_SALARY_SUMMARY ess
ON ess.EMPLOYEE_ID=e.EMP_ID
group by c.name, c.circle_id
)mtybl
ORDER BY loc_id;