Вы можете объединить таблицы, чтобы восстановить название компании, связанное с каждой записью в tablea
, а затем агрегировать:
select
count(*) no_ids,
count(distinct a.name) no_names,
sum(b.comany = 'B') no_b_company
from tablea a
inner join tableb b on b.id = a.company_id
Предположительно, id
является первичным ключом tablea
, поэтому мы просто используйте count(*)
, чтобы суммировать этот столбец. no_names
подсчитывает, сколько разных имен можно увидеть в соответствующем столбце, и sum(b.company = 'B')
увеличивается на 1
каждый раз, когда видится компания B.
Если существует вероятность пропустить компании в tableb
, Вы можете изменить inner join
на left join
.