sql - 如何在postgres中查询最近更新日期的同类别AVG值?
问题描述
是否可以在 Postgres 的单个查询中执行以下操作?
表:名称
-------------------------------------
| id | unique_name | category |
-------------------------------------
| 1 | A | One |
| 2 | B | One |
| 3 | C | One |
| 4 | D | Two |
| 5 | E | Two |
| 6 | F | Two |
| 7 | G | Three |
| 8 | H | Three |
-------------------------------------
表:价格
-----------------------------------------------------
| id | name_id | amount | updated_date |
-----------------------------------------------------
| 1 | 1 | 4.3 | 20-06-2020 |
| 2 | 2 | 2.3 | 20-06-2020 |
| 3 | 2 | 2.4 | 18-06-2020 |
| 4 | 3 | 4.4 | 20-06-2020 |
| 5 | 3 | 6.3 | 15-06-2020 |
| 6 | 4 | 0.2 | 10-06-2020 |
| 7 | 4 | 0.3 | 15-06-2020 |
| 8 | 4 | 7.4 | 20-06-2020 |
| 9 | 5 | 3.4 | 20-06-2020 |
-----------------------------------------------------
我有一个像上面这样的表结构。
我想要最近更新的同一类别的平均数量。
如下所示:
-----------------------------
| avg | category |
-----------------------------
| 3.66 | One | (4.3 + 2.3 + 4.4) / 3
| 5.4 | Two | (7.4 + 3.4) / 2
-----------------------------
解决方案
您可以使用distinct on
获取最新的price
每行name_id
,然后加入name
表并聚合:
select n.category, avg(p.price) avg_price
from name n
inner join (
select distinct on(name_id) p.*
from price p
order by name_id, updated_at desc
) p on p.name_id = n.id
group by n.category
推荐阅读
- java - 大家好,请问一下按键时的声音处理?
- angular - eva-icons@1.1.3、@angular/compiler@8.2.14、@angular/core@8.2.14 的 npm WARN tarball tarball 数据似乎已损坏
- php - 如何显示子路由器?
- html - 无法从移动设备提交联系表格
- css - 居中对齐页码的水平行内块列表
- android - RxJava2 间隔 + 主题
- wpf - 在 WPF MVVM 模式中更改查看按钮单击
- c# - 我的 HttpWebRequest 中的授权标头未正确更新
- node.js - TypeError:req.isAuthenticated 不是函数
- ios - 如何从 AVAudioSession 检测主声音方向