сгруппировать по сумме средних - PullRequest
0 голосов
/ 22 мая 2018

У меня следующая структура таблицы:

страна-источник года numObserved среднее
--- --- --- --- ---
abc 2016 us 30 15
abc 2017 us 10 20
pqr 2016 us 50 40
pqr 2017 ru 12 26
...

В каждом может быть несколько источников и несколько стран source.Я хочу вывод в виде:

год страна avg
--- --- ---
2016 США 30,625
2017 США 20
2017 ru26

, где avg вычисляется как Σ (numObserved*average) / Σ (numObserved) для любой данной пары year и country

.avg(average) на group by year, country не работает, потому что в среднем требуется 15, 40 (т.е. 27,5) для year = 2016 и country = us.

1 Ответ

0 голосов
/ 22 мая 2018

Вам просто нужно «накатить» свое средневзвешенное значение, а не полагаться на встроенную функцию avg:

SELECT
    country,
    year,
    SUM(numObserved * average) / SUM(numObserved) AS weighted_average
FROM my_table
GROUP BY country, year
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...