Как ограничить результат запроса организациями с двумя или более связанными с ним аккаунтами - PullRequest
0 голосов
/ 28 мая 2020

У меня есть следующий код, который возвращает результаты для дочерних организаций (родительских организаций), у которых нет связанных с ними адресов. Однако это возвращает более 2000 строк, со многими из которых связано 0 или 1 учетная запись.

Я бы хотел отредактировать запрос, чтобы только отображать результаты, в которых число учетных записей, связанных с подорганизацией, составляет 2 или более.

В нашей базе данных первичный ключ, связанный с таблицами учетных записей и организаций в операторе JOIN:

organizations.id = accounts.organization_id

и первичный ключ в таблице счетов - accounts.id

Я безуспешно пытался это выяснить. Если бы кто-то мог помочь предоставить решение, ограничивающее результаты только подорганизациями с количеством учетных записей, равным или большим 2

SELECT DISTINCT
  organizations.id AS org_id,
  organizations.name AS org_name,
  parent.id AS parent_org_id,
  parent.name AS parent_org_name
FROM
    organizations 
  INNER JOIN organizations parent 
    ON
    organizations.parent_org_id = parent.id
  LEFT JOIN addresses sub_addresses 
    ON
    sub_addresses.addressable_type = 'Organization'
    AND sub_addresses.is_current = 1
    AND sub_addresses.addressable_id = organizations.id
  LEFT JOIN addresses p_addresses 
    ON
    p_addresses.addressable_type = 'Organization'
    AND p_addresses.is_current = 1
    AND p_addresses.addressable_id = parent.id
WHERE
  sub_addresses.id is null
ORDER BY
  parent.name, 
  organizations.name

1 Ответ

1 голос
/ 28 мая 2020

Вам нужно еще одно соединение или подзапрос в разделе where, который предоставит вам организации как минимум с двумя или более учетными записями. Ниже представлена ​​версия для присоединения.

FROM organizations p
INNER JOIN organizations o ON o.parent_org_id = p.id
INNER JOIN (Select a.organization_id,Count(distinct a.id) as num_of_accounts
            FROM accounts a 
            GROUP BY a.organization_id
            HAVING Count(distinct a.id) >= 2) accnts ON accnts.organization_id = o.id
...