GROUP BY
относится только к подзапросу second . Это не то, что вы намереваетесь.
В большинстве баз данных ваш запрос приведет к ошибке. Я думаю, что вы хотите:
SELECT state, SUM(cnt) as cnt
FROM ((SELECT state, count(*) AS cnt
FROM `table_1`
WHERE submission_date > CURDATE() - INTERVAL 2 YEAR AND unk IS NULL
) UNION ALL
(SELECT state, count(*) AS cnt
FROM `table_2`
WHERE submission_date > CURDATE() - INTERVAL 2 YEAR AND unk IS NULL
GROUP BY state
)
) s
GROUP BY state
ORDER BY SUM(cnt) DESC;
Выполнение GROUP BY
в каждом подзапросе необязательно. Однако производительность GROUP BY
растет быстрее, чем линейно. Таким образом, два меньших GROUP BY
s обычно быстрее, чем один больший, даже с внешним агрегированием.