Как объединить агрегированные запросы с разными объединениями? - PullRequest
1 голос
/ 18 марта 2019

Я просматривал этот пост и этот пост jooq.org , пытаясь выяснить, как сделать мои комбинированные агрегации в MySQL , но не повезло.

Вот мои 2 запроса:

select a.IsTestAgency, a.ID, a.AgencyName, a.CreateDate, count(*) AS Agents
from Users u
join Agencies a
on u.AgencyID = a.ID
group by a.IsTestAgency, a.ID, a.AgencyName, a.CreateDate
order by a.IsTestAgency, a.AgencyName;

Результаты:

enter image description here

и

select a.IsTestAgency, a.ID, a.AgencyName, a.CreateDate, count(*) AS Certs
from Certificates c
join Agencies a
on c.AgencyID = a.ID
group by a.IsTestAgency, a.ID, a.AgencyName, a.CreateDate
order by a.IsTestAgency, a.AgencyName;

Результаты:

enter image description here

Вы видите, что столбцы и типы данных столбцов совпадают. Я хотел бы объединить их в один запрос и показать счетчик Agents и счетчик Certs бок о бок, так как это только два значения столбца, которые отличаются в наборах результатов.

Как это сделать?

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Вы можете сделать это, JOIN используя таблицы COUNT s:

select a.IsTestAgency, a.ID, a.AgencyName, a.CreateDate, u.Agents, c.Certs
from Agencies a
join (select AgencyID, COUNT(*) as Agents from Users group by AgencyID) u on u.AgencyID = a.ID
join (select AgencyID, COUNT(*) as Certs from Certficates group by AgencyID) c on c.AgencyID = a.ID
order by a.IsTestAgency, a.AgencyName;

Это устраняет необходимость в group by в верхнем запросе, а также избавляет от необходимости делать два подсчета подзапроса для каждой строки вывода.

1 голос
/ 18 марта 2019

Это то, что вы хотите?

select a.*, 
       (select count(*)
        from users u
        where u.AgencyID = a.ID
       ) as users_count,
       (select count(*)
        from Certificates c
        where c.AgencyID = a.ID
       ) as certificates_count
from Agencies a
order by a.IsTestAgency, a.AgencyName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...