这很难解释,但我说有这个问题:
SELECT *
FROM "late_fee_tiers"
然后它返回:
我在代码设置中进行了验证,以防止保存重复的days
(注意有两行days = 2
)。
我希望我的查询能够仔细检查只有day
的唯一行,如果有多行,请选择第一行(因此它应返回3行2,3,5)。
我的第一个想法是使用GROUP BY
天,同时选择MIN("id")
。
问题是,我不太了解SQL,因为它迫使我为每一列添加不同的聚合器功能......但是,如果我不想这样做呢?我想要选择"选择"根据我定义的单个聚合器函数,我不需要多个聚合器来创建一些奇怪的混合行。我只想让MIN()函数选择那一行并填写该行的所有其余值。
我使用什么功能来做这件事,或者我该怎么做?
由于
答案 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组。