Postgres - 分组而不必聚合?

时间:2017-02-13 17:55:14

标签: sql postgresql greatest-n-per-group

这很难解释,但我说有这个问题:

SELECT *
FROM "late_fee_tiers"

然后它返回:

enter image description here

我在代码设置中进行了验证,以防止保存重复的days(注意有两行days = 2)。

我希望我的查询能够仔细检查只有day的唯一行,如果有多行,请选择第一行(因此它应返回3行2,3,5)。

我的第一个想法是使用GROUP BY天,同时选择MIN("id")

问题是,我不太了解SQL,因为它迫使我为每一列添加不同的聚合器功能......但是,如果我不想这样做呢?我想要选择"选择"根据我定义的单个聚合器函数,我不需要多个聚合器来创建一些奇怪的混合行。我只想让MIN()函数选择那一行并填写该行的所有其余值。

我使用什么功能来做这件事,或者我该怎么做?

由于

1 个答案:

答案 0 :(得分:2)

您想使用DISTINCT ON

select distinct on (day) *
from "late_fee_tiers"
order by day, id;
  

为什么day中还需要order by

来自官方文件:

  

DISTINCT ON表达式必须与最左边的ORDER BY匹配   表达式(多个)。 ORDER BY子句通常包含其他内容   表达式,用于确定所需行的优先级   每个DISTINCT ON组。