我有两张桌子。
第一个是people
,它有三列(id
,name
,age
)。
第二个是针对人群的,它有三列(group_id
,person_id
)。
首先,我要求年龄大于18的人:
SELECT *
FROM people
WHERE age >= 18;
现在我想得到一个包含所有这些人的小组。我该怎么办?
答案 0 :(得分:2)
你想要一个小组中的所有18岁以上的老人吗?好吧,让我们算一下,看看数字是否匹配:
select pg.group_id
from people_group pg join
people p
on pg.person_id = p.id and p.age >= 18
group by pg.group_id
having count(distinct pg.person_id) = (select count(*) from people where age >= 18);
答案 1 :(得分:0)
您可以尝试以下操作:
select pg.group_id
from people_group pg
left join people p on p.id = pg.person_id and p.age >= 18
group by pg.group_id
having sum(case when p.id is null then 1 end) is null