Запросы даже не похожи. Они очень разные. Давайте проверим первый:
select count(1)
from table_1 a
inner join table_2 b
on a.key = b.key
where a.id in (
select id from table_1 group by id having count(1) > 1
) ;
Сначала вы выполняете внутреннее соединение:
select count(1)
from table_1 a
inner join table_2 b
on a.key = b.key
В этом случае вы можете использовать count (1), count (id), count (*), эквивалентно. Вы подсчитываете общие элементы в обеих таблицах: те, которые имеют общее ключевое поле.
После этого вы выполняете это:
where a.id in (
select id from table_1 group by id having count(1) > 1
)
В другими словами, каждый "id" таблицы_1 должен как минимум два раза встречаться в таблице table_1.
И, наконец, вы делаете это:
select count(1)
Другими словами, подсчет эти элементы. Итак, переведя на английский sh, вы сделали это:
- получите каждую запись table_1 и соедините с записями table_2 для идентификатора и получите только те, которые соответствуют
- для приведенный выше результат, отфильтруйте только элементы, идентификатор которых в таблице_1 встречается более одного раза
- подсчитайте этот результат
Давайте посмотрим, что произойдет со вторым запросом:
select sum(a) from (
select count(1) as a
from table_1 a
inner join table_2 b
on a.key = b.key
group by a.id
having count(1) > 1
);
Вы делаете такое же внутреннее соединение:
select count(1) as a
from table_1 a
inner join table_2 b
on a.key = b.key
, но группируете его по идентификатору таблицы:
group by a.id
, а затем фильтруете только те элементы, которые появляются более одного раза:
having count(1) > 1
Результатом является набор записей, которые имеют общее ключевое поле в обеих таблицах, но сгруппированы по идентификатору: это означает, что только те поля, которые есть как минимум два раза в table_b, выводятся из этого соединения . После этого вы группируете по идентификатору, свертывая эти результаты в поле table_1.id и подсчитывая результат. Я предполагаю, что очень немногие записи будут соответствовать этим строгим критериям.
И, наконец, вы суммируете все те, которые установлены.