sql: объединение нескольких разных запросов к таблице в один ответ
Подскажите как оптимальнее сделать следующую задачу:
требуется получить кол-во записей по двум разным группам из одной таблице, т.е. сделать следующие 2 запроса:
SELECT
COUNT(*) AS count, YEAR(date_x) AS value
FROM
table
ORDER BY date_x
и
SELECT
COUNT(*) AS count, YEAR(date_y) AS value
FROM
table
ORDER BY date_y
Первое решение - просто кинуть 2 запроса и успокоиться
Второе решение - получить сразу 2 ответа в виде JSON (всё равно дальше работать с JSON) за один запрос:
SELECT
(
SELECT
JSON_ARRAYAGG(JSON_MERGE(JSON_OBJECT('count', count), JSON_OBJECT('value', value)))
FROM
(SELECT
COUNT(*) AS count, YEAR(date_x) AS value
FROM
table
ORDER BY date_x) as result
) as result_x,
(
SELECT
JSON_ARRAYAGG(JSON_MERGE(JSON_OBJECT('count', count), JSON_OBJECT('value', value)))
FROM
(SELECT
COUNT(*) AS count, YEAR(date_y) AS value
FROM
table
ORDER BY date_y) as result
) as result_y
По идее работать должно одно и тоже время, но надежда на БД - авось оптимизирует
Вопрос: Но может для таких задач есть какое-то третье, производительное правильное решение?
Источник: Stack Overflow на русском