我想获得数据库中每个位置的每月访问量(从当月开始)。我有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
我想驳斥我所想的位置,因为那里没有数据,但是我需要向他们展示即使他们没有任何访问。
有人知道我想念什么吗?
答案 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;