sql - 40 个季度的 SQL 平均值
问题描述
我需要最近 40 个季度的一篇文章的平均销售额:
select amountofsale, year, quarter, article from table1
+---------+--------+--------+-----------+----
| amountofsale | year | quarter | article |
+---------+--------+--------+-----------+----
| 50 | 2019 | 3 | article1 |
| 40 | 2019 | 2 | article1 |
| 42 | 2019 | 1 | article1 |
| ... | ... | ... | article1 |
| 2 | 2009 | 4 | article1 |
| 204 | 2009 | 3 | article1 |
| 150 | 2019 | 3 | article2 |
| 95 | 2019 | 2 | article2 |
| 23 | 2019 | 1 | article2 |
| ... | ... | ... | article2 |
| 14 | 2009 | 4 | article2 |
| 204 | 2009 | 3 | article2 |
+---------+--------+--------+-----------+-----
结果:2019 年第三季度至 2009 年第四季度的平均值 =40 值
+---------+--------+--------+-----------+----
| Avg | article |
+---------+--------+--------+-----------+----
| 33.5 | article1|
| 70.5 | article2|
如果 2019Q4 可用,则平均值应该是从 Q12010 到 Q42019
最好的齐奥
解决方案
我需要最近 40 个季度的一篇文章的平均销售额:
这是做你想做的吗?
select article, avg(amountofsale)
from t
where year > 2009 or year = 2009 and quarter >= 3
group by article;
在 Postgres 中,您可以将where
子句简化为:
where (year, quarter) >= (2009, 3)
如果您特别想要 40 个季度的时间倒流(上面的内容不太适用):
where year * 4 + quarter >= extract(year from now()) * 4 + extract(quarter from now()) - 40;
如果您希望它从文章数据中的最近一个季度按时间顺序倒退 40 个季度:
select article, avg(amountofsale)
from (select t.*,
max(year * 4 + quarter) as max_yq
from t
) t
where (year * 4 + quarter) >= max_yq - 40
group by article;
推荐阅读
- python - 通过 Powershell 或 Git Bash 运行 Python
- python-3.x - jupyter:如果 x 是表达式或变量,则 any(x) 的行为会有所不同
- c# - 如何从控制台程序分析外部类库
- javascript - 如何将 JSON 对象从 JSP 传递到 Javascript?
- c++ - 如何更新 QT 中的窗口?
- inheritance - ocaml 如何使用具体类型测试模块
- amazon-web-services - aws ec2 describe-instance-status 按标签过滤不起作用
- java - 删除链接的特定部分
- android - 如何从 Kotlin 中的 Firebase Cloud Firestore 获取数据
- linux - 将 Carbone 添加到 Docker 映像