首页 > 解决方案 > ORA-00934: 尝试使用 UPDATE 时,此处不允许使用组功能

问题描述

我在 Oracle APEX 中编写了这段代码:

UPDATE employee SET total_cost = (SUM(c.price) 
FROM course c, schooling s
WHERE 
s.id_employee_schooling = id_employee AND s.id_course_schooling = c.id_course);

它告诉我

这里不允许使用群组功能。

我发现我不能一起使用sumandWHERE但我不知道如何以另一种方式编写此代码。有什么解决办法吗?谢谢你。

标签: sqloraclegroup-bysql-update

解决方案


看起来您只是忘记了SELECT子查询中的关键字。

UPDATE employee
       SET total_cost = (SELECT sum(c.price)
                                FROM course c
                                     INNER JOIN schooling s
                                                ON s.id_course_schooling = c.id_course
                                WHERE s.id_employee_schooling = id_employee);

我还将您的隐式连接更改为显式连接以提高可读性。

但看起来你将要做的事情根本不应该做。total_cost似乎存储了可能导致不一致的冗余数据。所以total_cost应该完全删除物理列。当您在查询员工时需要该值时,可以通过连接或子查询从其他表中获取该值。这样,价值观总是正确的。您还可以创建一个视图以使其更方便。


推荐阅读