【发布时间】:2021-07-28 05:58:26
【问题描述】:
背景
我有这个 PostgreSQL 加入对我来说相当很好:
select m.id,
m.zodiac_sign,
m.favorite_color,
m.state,
c.combined_id
from people."People" m
LEFT JOIN people.person_to_person_composite_crosstable c on m.id = c.id
如您所见,我正在加入两个表以引入 combined_id,我需要稍后在别处进行分析。
目标
我想编写一个查询,方法是选择combined_id,它旁边有m.id 的最低值(以及其他变量)。这应该会产生一个新表,其唯一/不同值为 combined_id。
问题
问题是当前查询返回约 300 条记录,但我需要它返回约 100 条记录。为什么?每个combined_id 平均有3 个不同的m.id。我实际上并不关心m.id's;我关心获得一个独特的combined_id。因此,我决定一个好的“选择标准”是根据最低值 m.id 为具有相同 combined_id 的行选择行。
我的尝试
我已经查阅了几篇关于此的帖子,我觉得我已经很接近了。参见例如this one 或this one。 This other one 正是我需要的(用MAX 而不是MIN),但他在 Unix Bash 中要求它????
这是我尝试过的一个例子:
select m.id,
m.zodiac_sign,
m.favorite_color,
m.state,
c.combined_id
from people."People" m
LEFT JOIN people.person_to_person_composite_crosstable c on m.id = c.id
WHERE m.id IN (select min(m.id))
这会返回错误ERROR: aggregate functions are not allowed in WHERE。
有什么想法吗?
【问题讨论】:
标签: sql postgresql join