PostgreSQL COUNT DISTINCT для одного столбца при проверке дубликатов другого столбца - PullRequest
0 голосов
/ 09 января 2019

У меня есть запрос, который приводит к такой таблице:

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 голосов
/ 09 января 2019

Чтобы получить отличную семью, вы можете попробовать следующий подход.

select distinct array_agg(distinct guardian_id) 
from family
group by child_id;
Приведенный выше запрос вернет список уникальных семейств. например.
{1,2}
{3,4}
Теперь вы можете применить количество сверху.
...