一列上的PostgreSQL COUNT DISTINCT,同时检查另一列的重复项

时间:2019-01-09 08:58:45

标签: postgresql count distinct postgresql-9.1

我有一个查询,产生了这样一个表:

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?还有其他方法吗?

还请注意,在某些情况下,孩子可能只有一名监护人。

1 个答案:

答案 0 :(得分:1)

要获得独特的家庭,您可以尝试以下方法。

select distinct array_agg(distinct guardian_id) 
from family
group by child_id;
上面的查询将返回唯一族的列表。 例如。
{1,2}
{3,4}
现在,您可以在其上应用计数。