这是一个基于我之前问题的解决方案的新问题
我有以下表格:
用户
int (pk) user_id
date last_visit
int (fk) local_site
网站
int (pk) site_id
网站统计
int (fk) site_id
int total_users
int monthly_users
int weekly_users
我正在使用这个查询来更新 user_stats 表
UPDATE site_stats
SET
total_users = totalUsers,
monthly_users = monthlyUsers,
weekly_users = weeklyUsers
FROM
(
SELECT
u.local_site AS site,
count (u.*) AS totalUsers,
count(CASE WHEN u.last_visit >= now()::DATE - 30 THEN 1 END) AS monthlyUsers,
count(CASE WHEN u.last_visit >= now()::DATE - 7 THEN 1 END) AS weeklyUsers
FROM users u
GROUP BY u.local_site
) AS subquery
WHERE site_stats.site_id = subquery.site ;
这工作正常,除了如果在时间范围内有 0 个用户链接到站点,则不会发生更新,因此表 col 将保留以前的值而不是显示 0。
添加条件以使任何具有 0 个链接用户的网站都更新为 0 的最佳方法是什么?
我的第一个猜测是CASE
在WHERE
子句中使用 a ?
要么您运行额外
UPDATE
的(最好在一个事务中):或者改用这个(我会这样做):
包括其他一些小的简化。