用MIN和DISTINCT计数



我有一个查询,它返回用户在一个月内访问的信息,但只针对那些在该月之前没有访问的用户。这次访问与这次访问的"地点"有关。

这是一个查询:

SELECT DISTINCT MIN(visits.cust_id), locations.name as location FROM visits
LEFT JOIN customer ON visits.id = customer.id
LEFT JOIN locations ON customer.location_id = locations.id
WHERE date_trunc('month', CURRENT_DATE) = date_trunc('month', visits.visit_date) AND (customer.referral = 'emp' OR customer.referral = 'oth')
AND NOT EXISTS (
SELECT FROM visits
WHERE id = customer.id
AND date_trunc('month', CURRENT_DATE) > date_trunc('month', visits.visit_date)
)
GROUP BY visits.visit_date, visits.cust_id, locations.name
HAVING count(visits.visit_date) = 1;

结果是:

cust_id |     location
---------------------
1   |      Loc 1
2   |      Loc 1
3   |      Loc 1

在我的位置表上有3个,所以我希望结果只是ID和位置名称的计数:

cust_id  |   location
---------------------
3       |    Loc 1
0       |    Loc 2
0       |    Loc 3

我知道我可以将整个查询包装成一个计数,它会对结果进行计数,但它只给我一个3,这是正确的,但我仍然需要将表与它指示该计数来源的位置连接起来,并列出其他缺失的位置。

WITH x AS (
your_query_here
)
SELECT COUNT(x.cust_id), l.name
FROM locations l
LEFT JOIN x ON x.location = l.name
GROUP BY l.name

尽管我建议更改您的查询以返回在联接条件中使用该位置的id。但总的来说,这会给你带来结果。

最新更新