sql - 从另一个表更新平均值/计数
问题描述
我已经为这个问题提供了以下架构,我正在尝试做两件事:
- 使用 POST_EVAL 表中每个 account_id 的评估行的平均值更新 ACCOUNT 表的 average_eval 行。
- 使用每个 account_id 的帖子数更新 ACCOUNT 表,如果 account_id 没有与之关联的 post_id,则默认值为 0。
这是踢球者:我必须使用该UPDATE
语句,并且不允许对这些特定问题使用触发器。
我试过WITH
条款,GROUP BY
但没有得到任何地方。使用 postresql 的 pgadmin 作为参考。
设置这些查询有什么帮助吗?
解决方案
第一个问题可以用这样的方法来完成:
update account a
set average_eval = t.avg_eval
from (
select account_id, avg(evaluation) as avg_eval
from post_eval
group by account_id
) t
where t.account_id = a.account_id
第二个问题需要一个共同相关的子查询,因为无法在 UPDATE 语句中表达外连接,如下所示:
update account a
set num_posts = (select count(*)
from post p
where p.account_id = a.account_id);
如果该帐户没有帖子,count()
则将返回零 ( )。0
如果使用了连接(如在第一条语句中),则根本不会更新行,因为“连接”条件不匹配。
我没有测试过这些语句中的任何一个,因此它们可能包含拼写错误(甚至是逻辑错误)。
无关,但是:我知道这是某种任务,所以你别无选择。但正如 RiggsFolly 所提到的:一般来说,您应该避免将信息存储在可以从现有数据派生的关系数据库中。这两个值都可以在视图中轻松计算,然后始终保持最新。
推荐阅读
- java - 将一个对象的 ArrayList 的内容传输到另一个对象
- clojure - 如何获得 Clojure Spec 作为对象?
- python - 投票 If/Else/Elif
- php - 我的 Codeigniter 脚本上有数据库错误
- laravel - Laravel/PyroCMS Web 服务器和 PHP Composer 权限
- mysql - 在 MySql 中更新自动增量
- python-3.x - 在 Python 中执行多个列表的逻辑或运算
- vba - Microsoft Visual Basic,运行时错误 424:需要对象
- c++ - 内联扩展编译成函数调用 [c++]
- javascript - epmty DIV 中的 Mouseenter、mouseleave。更改颜色并将其删除