У меня есть 3 сложные таблицы. Для этого вопроса я упрощу обычаи. Мне нужен рейтинг, подсчет (дуплики) и уникальные записи (результат). Он работает с одной таблицей, однако, когда включен другой WITH
и указан INNER JOIN
, я больше не получаю никаких записей.
Таблицы:
CREATE TABLE public.emails (
id bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY
(MAXVALUE 9223372036854775807),
sender jsonb NOT NULL
);
CREATE TABLE public.contacts (
id bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY
(MAXVALUE 9223372036854775807),
email text NOT NULL,
full_name text NOT NULL
);
-- sample data
insert into emails (sender) VALUES ('{"email": "[email protected]", "name": "dennis1"}');
insert into emails (sender) VALUES ('{"email": "[email protected]", "name": "dennis1"}');
insert into contacts (email, full_name) VALUES ('[email protected]', 'dennis1');
insert into contacts (email, full_name) VALUES ('[email protected]', 'dennis1');
insert into contacts (email, full_name) VALUES ('[email protected]', 'dennis5');
insert into contacts (email, full_name) VALUES ('[email protected]', 'john');
Ожидаемый результат:
email name rk count
[email protected] dennis1 1 4
[email protected] dennis5 1 1
[email protected] john 1 1
Тем не менее, у меня есть 2 проблемы с этим:
INNER JOIN
дает нулевой результатORDER BY "count"
не работает.
Что мне нужно?
Как видите, таблицы разные. Одна таблица имеет столбец jsonb
, а другая хранится как text
. Итак, я отдельно извлекаю их в каждом запросе SELECT
, а затем сравниваю.
Итак, что мне нужно, это получить все электронные адреса и имена, сделать их уникальными, подсчитать их, если они дублируются, и ранжировать их. Мне не нужны повторяющиеся записи, а объединяю их в count
.
Как я могу решить эту проблему?
Демо
См. демо здесь: https://dbfiddle.uk/?rdbms=postgres_12&fiddle=b79700f77c5f14e5b0d