我使用Postgresql,使用计数成本很高。我想要做的是计算另一个表中的一个表ID并更新计数。 让我们说第一个表是类别
ID
名称
num_count
其他表是餐厅
ID
名称
CATEGORY_ID
我想根据Restaurants.category_id的计数值更新categories.num_count。
我可以这样做
Update Categories set Categories.num_count = (select count(*) from Restaurants where Restaurants.category_id = Categories.id)
但是花了太多时间。我尝试做一些事情,例如迭代餐馆1次并更新Categories.num_count ++,但我无法做到正确,因为它使每个类别num_count 1.它在1次执行后停止工作。
使用sql有更好的方法吗?
答案 0 :(得分:1)
update categories c
set num_count = r.num_count
from (
select category_id, count(*) as num_count
from restaurants
group by category_id
) r
where c.id = r.category_id
答案 1 :(得分:1)
怎么样:
with countPerCategory (categoryId, numCount) as
{
select category_id, count(*) from Restaurants
group by category_id
}
update Categories set num_count = countPerCategory.numCount
from countPerCategory
where Categories.id = countPerCategory.categoryId;
PS:我发现这是不必要的事情。每当添加或删除餐馆时,您都需要更新num_count。