Я пытаюсь вернуть аналитический запрос для ряда метрик для определенных активов за один вызов, однако не все активы имеют каждый показатель c. Поэтому я также хочу вернуть количество совпадающих активов в расчете на метри c.
У меня есть следующая структура данных
|--- asset ---|--- date ---|--- metric1 ---|--- metric2 ---|
| abc | 2020-04-01 | 53 | <null> |
| abc | 2020-04-02 | 64 | <null> |
| def | 2020-04-01 | 22 | 15 |
| def | 2020-04-02 | 89 | 42 |
| ghi | 2020-04-01 | <null> | 8 |
| ghi | 2020-04-02 | <null> | 92 |
| jkl | 2020-04-01 | <null> | 55 |
| jkl | 2020-04-02 | <null> | 36 |
Результат, который я получаю, равен
|--- metric1_sum ---|--- metric2_sum ---|--- metric1_asset_count ---|--- metric2_asset_count ---|
| 228 | 248 | 2 | 3 |
Единственный способ, которым я могу думать, - это добавить подзапросы для каждого показателя c например,
SELECT SUM(metric1) AS "metric1_sum",
SUM(metric2) AS "metric2_sum",
(SELECT COUNT(DISTINCT asset)
FROM table
WHERE metric1 IS NOT NULL) AS "metric1_asset_count",
(SELECT COUNT(DISTINCT asset)
FROM table
WHERE metric2 IS NOT NULL) AS "metric2_asset_count"
FROM table
Однако, когда я увеличу это число до слишком большого количества показателей в таблице ~ 10, запрос время резко увеличивается.
Я не эксперт по SQL, есть ли способ вернуть мне требуемые результаты в разумные сроки?