如何仅对一列使用'Distinct'?

问题描述 投票:0回答:2

我有一个查询,用于检查我具有的某些“位置”表中的访问。如果用户使用“ emp”或“ oth”的引荐进行了注册,则不应将其首次访问计为计数,而应将第二次访问和向前计为计数。

我正在尝试计算每个位置的“首次访问”次数。每当他们去拜访时,我都会得到一个记录,记录在哪个位置。

问题是我的查询计数正确,但是某些用户访问了不同的位置。因此,与其仅计算该位置的访问次数(第一个),不如在用户访问过的每个位置添加一个。

这是我的查询

SELECT COUNT(DISTINCT CASE WHEN customer.ref IN ('emp', 'oth') THEN customer.id END) as visit_count, locations.name as location FROM locations
LEFT JOIN visits ON locations.location_name = visits.location_visit_name
LEFT JOIN customer ON customer.id = visits.customer_id
WHERE locations.active = true
GROUP BY locations.location_name, locations.id;

我得到的结果是

visit_count |  locations
-------------------------
    7       |      Loc 1
    3       |      Loc 2
    1       |      Loc 3

应该如何:

visit_count |  locations
-------------------------
    6       |      Loc 1
    2       |      Loc 2
    1       |      Loc 3

因为这些人中有2人在两个地点都有访问,所以每个地点都算一次。我认为DISTINCT也在位置上执行,这时应该只在customer.id的计数上

是否有一种方法可以向查询中添加一些内容,以便仅获取第一次访问的位置,而无需关心他们是否在其他位置进行了其他访问?

我有一个查询,用于检查我具有的某些“位置”表中的访问。如果用户使用“ emp”或“ oth”的引荐进行了注册,则他们的第一次访问不应计入,而是第二次访问并进行转发...

postgresql
2个回答
0
投票

您可以使用postgres的功能distinct on


0
投票

尝试在where子句中移动when条件

© www.soinside.com 2019 - 2024. All rights reserved.