计数为零时的跳过记录

时间:2019-06-12 15:19:21

标签: postgresql

我想获得数据库中每个位置的每月访问量(从当月开始)。我有3个地点,预期/预期结果应该是:

visit_count |   location_name
------------------------------
    1       |    location1
    0       |    location2
    0       |    location3

这是我的查询:

SELECT COUNT(visits.visit_date) as visit_count, locations.location_name FROM locations 
LEFT JOIN VISITS ON locations.location_name = visits.location_checkin
WHERE locations.group_id = 1 AND date_trunc('month', current_date) <= visits.visit_date AND visits.visit_date < date_trunc('month', current_date) + INTERVAL '1 month' 
GROUP BY locations.location_name

但是我得到:

visit_count |   location_name
------------------------------
    1       |    location1

我想驳斥我所想的位置,因为那里没有数据,但是我需要向他们展示即使他们没有任何访问。

有人知道我想念什么吗?

1 个答案:

答案 0 :(得分:1)

未经测试,但是通过将位置签入计数放在子查询中,之后可以通过左连接拾取丢失的所有内容。合并将在结果中填充零而不是null。

SELECT Coalesce(v.visit_count,0) visit_count, locations.location_name
    FROM locations
    LEFT JOIN (SELECT location_checkin, count(visit_date) visit_count FROM visits
                   WHERE date_trunc('month', current_date) <= visit_date AND visit_date < date_trunc('month', current_date) + INTERVAL '1 month'
                   GROUP BY locations) v 
        ON v.location_checkin = locations.location_name
    WHERE locations.group_id = 1;