sql - 按月优化 postgres 查询平均值 [已编辑]
问题描述
我们有这张表可以每天多次保存价格,我们需要按月获取每天的平均价格。
基本上,我们根据代码和日期过滤这些价格,并UNION
为每个月使用
表格示例:
日期 | 代码 | 价格 |
---|---|---|
2020-01-01 | 'FS-H21' | 150 |
2020-01-01 | 'FS-H21' | 151 |
2020-01-01 | 'FS-G21' | 155 |
2020-01-02 | 'FS-H21' | 151 |
2020-01-03 | 'FS-G21' | 148 |
和查询示例:
SELECT period, code, avg(price)
FROM period_prices
WHERE code = 'FS-F21' AND period BETWEEN '2020-01-01' AND '2020-01-31'
GROUP BY period, code
UNION
SELECT period, code, avg(closure)
FROM period_prices
WHERE code = 'FS-F21' AND period BETWEEN '2020-02-01' AND '2020-02-29'
GROUP BY period, code
...
在示例查询中重现表和查询...
编辑:
期望的结果:
FS-H21
每天存储 3 个价格。报告必须显示该代码在特定时期内每一天的平均价格,例如一个月 ( BETWEEN '2020-01-01' AND '2020-01-31'
)
桌子:
日期 | 代码 | 价格 |
---|---|---|
2020-01-01 | 'FS-H21' | 150 |
2020-01-01 | 'FS-H21' | 151 |
2020-01-01 | 'FS-H21' | 152 |
2020-01-03 | 'FS-H21' | 150 |
2020-01-03 | 'FS-H21' | 152 |
2020-01-04 | 'FS-H21' | 155 |
查询结果:| 日期 | 代码 | 平均 | | -- | -- | --| | 2020-01-01 | 'FS-H21' | 151 | | 2020-01-04 | 'FS-H21' | 151 | | 2020-01-05 | 'FS-H21' | 155 |
我想要一些关于如何提高该查询的性能的建议,或者是否有更好的方法来实现这一点!
谢谢
解决方案
大概,您想按月而不是按天汇总。那将是:
SELECT DATE_TRUNC('month', period) as yyyymm, code, avg(closure)
FROM period_prices
WHERE code = 'FS-F21'
GROUP BY yyyymm, code;
如果您想要每天的平均值,那么您可以只使用一个查询:
SELECT period, code, avg(closure)
FROM period_prices
WHERE code = 'FS-F21'
GROUP BY period, code;
推荐阅读
- java - 对 java 进程的 Ansible 检查开始执行
- php - 如何从数据库中获取 Json 输出中的特定列
- angular - 如何使用 Ngrx 和 Reactive Form 在 Angular 中显示日期和时间戳
- python - Python:字符串操作难度
- python - Pandas,Datetime NaT 删除并替换为 None,'str' 对象没有属性 'strftime'
- php - 如何将mysql数据库中的数据插入到html文件中的表中?
- javascript - SemanticUI/ReactJS 模态不支持 html 内容
- laravel - 全局安装 Composer 时出现错误“没有这样的文件或目录”
- javascript - 从日期对象数组中获取 id,并从日历中选择日期
- java - 如何从所有者实例访问变量?