Представьте себе эту таблицу
Name | Date | Value
--------------------
Olli | 2019 | 2
Olli | 2018 | 2
Olli | 2017 | 2
Olli | 2016 | 1
Olli | 2015 | 1
Olli | 2014 | 1
Pete | 2019 | 3
Pete | 2018 | 3
Pete | 2017 | 3
Pete | 2016 | 2
Pete | 2015 | 9
Я хочу выбрать частное от кратковременного среднего (последние 3 строки) и среднего значения за каждое имя:
Olli: 2 / 1.5 = 1.3333
Pete: 3 / 4 = 0.75
Без группировки по имени я могу легко выбрать все компоненты:
SELECT MEAN(value) FROM tbl WHERE name = 'Olli' -- all time mean, used directly in final query
-- for the short term mean I use a CTE:
WITH short_term_tbl AS (SELECT * FROM tbl WHERE name = 'Olli' ORDER BY Date DESC LIMIT 3)
SELECT MEAN(short_term_tbl.value) / MEAN(table.value)
FROM short_term_tbl, tbl
Но как я могу обобщить это для всех имен?
Я был бы очень рад найти решение, котороеработает как на mysql, так и на postgresql.