我有一个查询,产生了这样一个表:
guardian_id | child_id | guardian_name | relation | child_name |
------------|----------|---------------|----------|------------|
1 | 1 | John Doe | father | Doe Son |
2 | 1 | Jane Doe | mother | Doe Son |
3 | 2 | Peter Pan | father | Pan Dghter |
4 | 2 | Pet Pan | mother | Pan Dghter |
1 | 3 | John Doe | father | Doe Dghter |
2 | 3 | Jane Doe | mother | Doe Dghter |
因此,从这些结果中,我需要计算家庭人数。也就是说,不同的孩子拥有相同的监护人。根据上面的结果,有3个孩子,但有2个家庭。我该如何实现?
如果我这样做:
SELECT COUNT(DISTINCT child_id) as families FROM (
//larger query
)a
我得到3个不正确的数字。
另外,如何合并一个WHERE
子句来检查DISTINCT
Guardian_id?还有其他方法吗?
还请注意,在某些情况下,孩子可能只有一名监护人。
答案 0 :(得分:1)
要获得独特的家庭,您可以尝试以下方法。
select distinct array_agg(distinct guardian_id)
from family
group by child_id;
上面的查询将返回唯一族的列表。
例如。
{1,2}
{3,4}
现在,您可以在其上应用计数。