【发布时间】:2019-10-21 07:32:32
【问题描述】:
想象一下这张桌子
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 的解决方案。
【问题讨论】:
标签: mysql sql common-table-expression