Допустим, у нас есть следующая таблица, в которой хранится id
наблюдения и его address_id
. Вы можете создать таблицу со следующим кодом:
drop table if exists schema.pl_address_cnt;
create table schema.pl_address_cnt (
id serial,
address_id int);
insert into schema.pl_address_cnt(address_id) values
(100), (101), (100), (101), (100), (125), (128), (200), (200), (100);
Моя задача - подсчитать для каждого id
, сколько других id
с (то есть -1) имеют одинаковые address_id
. Я пришел к решению, которое оказывается довольно дорогим (explain
) по сравнению с исходным набором данных. Интересно, можно ли как-то оптимизировать мое решение.
with tmp_table as (select address_id
, count(distinct id) as id_count
from schema.pl_address_cnt
group by address_id
)
select id
, id_count - 1
from schema.pl_address_cnt as pac
left join tmp_table as tt on tt.address_id=pac.address_id;