我在这件事上挣扎了一段时间,似乎想不通了.
我有一个客户、关系(定义客户之间的关系及其类型)和咨询. 我不想计算的是,为合作伙伴提供了多少次新类型的咨询.问题是,可能会发生这样的情况:两个客户都有一个‘New’类型的咨询,但我只想数一个,因为我只对我在咨询中有多少个合作伙伴感兴趣.
以下是我的数据库的简化SQL
CREATE TABLE clients (
id INT NOT NULL,
name VARCHAR NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE relations (
id INT NOT NULL,
from_client_id INT NOT NULL,
to_client_id INT NOT NULL,
relation_type VARCHAR NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE consultations (
id INT NOT NULL,
client_id INT NOT NULL,
type_of VARCHAR NOT NULL,
PRIMARY KEY(id)
);
一些种子数据
insert into clients (id, name)
VALUES
(1, 'John Doe'),
(2, 'Jane Doe'),
(3, 'Fiddle Blaab'),
(4, 'Agnes Blaab'),
(5, 'Kid Blaab')
insert into relations (id, from_client_id, to_client_id, relation_type)
VALUES
(1, 1, 2, 'partner'),
(2, 3, 4, 'partner'),
(3, 3, 5, 'child'),
(4, 4, 5, 'child')
insert into consultations (id, client_id, type_of)
VALUES
(1, 1, 'New'),
(2, 2, 'New'),
(3, 2, 'Follow Up'),
(4, 3, 'New'),
(5, 4, 'Follow Up')
像这样 Select 数据会得到3,但在本例中我只希望得到2.
SELECT
count(*)
FROM consultations
INNER JOIN clients ON consultations.client_id = clients.id
AND "consultations"."type_of" = 'New'
INNER JOIN relations ON (relations.from_client_id = consultations.client_id OR relations.to_client_id = consultations.client_id)
AND relations.relation_type = 'partner'
这是因为无名氏John Doe和无名氏Jane Doe的咨询类型都是"new",但在本例中,我只想计算一次咨询,因为我只对咨询中有多少名合伙人感兴趣,在咨询中,这个 Select 将我和Jane和John都算作合伙人.
所以我的预期结果是无名氏和无名氏是1,菲德尔·布莱布和阿格尼丝·布莱布是第二.
我希望这对我正在努力实现的目标有意义.
我创造了一个db fiddle