【发布时间】:2020-05-10 02:36:10
【问题描述】:
我有 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": "dennis1@example.com", "name": "dennis1"}');
insert into emails (sender) VALUES ('{"email": "dennis1@example.com", "name": "dennis1"}');
insert into contacts (email, full_name) VALUES ('dennis1@example.com', 'dennis1');
insert into contacts (email, full_name) VALUES ('dennis1@example.com', 'dennis1');
insert into contacts (email, full_name) VALUES ('dennis5@example.com', 'dennis5');
insert into contacts (email, full_name) VALUES ('john@example.com', 'john');
预期结果:
email name rk count
dennis1@example.com dennis1 1 4
dennis5@example.com dennis5 1 1
john@example.com john 1 1
但是,我遇到了两个问题:
-
INNER JOIN的结果为零 -
ORDER BY "count"不起作用。
我需要什么?
如您所见,表格是不同的。一个表有jsonb 列,另一个存储为text。因此,我在每个SELECT 查询中分别提取它们然后进行比较。
所以我需要是,获取所有电子邮件和姓名,将它们独一无二,如果它们重复并排名它们,则对其进行计数。我不需要重复的条目,而是将它们合并到count。
我该如何解决这个问题?
演示
在此处查看演示:https://dbfiddle.uk/?rdbms=postgres_12&fiddle=b79700f74bbf14e190d5f5bf7fcd0670
【问题讨论】:
标签: sql postgresql postgresql-12