我有一个查询,用于检查我具有的某些“位置”表中的访问。如果用户使用“ 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”的引荐进行了注册,则他们的第一次访问不应计入,而是第二次访问并进行转发...
您可以使用postgres的功能distinct on
:
尝试在where子句中移动when条件