postgres:在多个字段上聚合函数

时间:2019-03-27 14:36:44

标签: sql postgresql group-by aggregate

我的桌子是:

<button onclick="chechAnswer()">Play</button>

我想按类型分组,并为每个分组找到最高价格和最早(按时间)价格。

从计算角度来看,这是一个简单的线性/类似约简运算。但是如何在postgres中完成呢?有这样的现有功能吗?我必须创建自己的聚合吗?我应该将两个字段编码成一个像price: numeric, time: timestamp, type: integer 这样的字段,并从中找出最小值吗?

1 个答案:

答案 0 :(得分:1)

嗯。 Postgres没有first()聚合函数,但是您可以改用数组:

select type,
       max(price),
       array_agg(price order by time asc)[1] as earliest_price
from t
group by type;

编辑:

还有其他方法,例如:

select distinct on (type) type,
       max(price) over (partition by type),
       price
from t
order by type, time asc;