【问题标题】:Oracle PL/SQL ORA-00937 "not a single-group group function"Oracle PL/SQL ORA-00937“不是单组组函数”
【发布时间】:2015-08-31 03:02:18
【问题描述】:

我正在使用 oracle pdf 来学习 pl/sql。 有一个练习,我必须创建一个包含数据的新表 已经存在的另外两个表。我认为这可以解决问题:

CREATE TABLE new_depts 
AS SELECT d.department_id, d.department_name, sum(e.salary) dept_sal 
FROM employees e, departments d 
WHERE e.department_id = d.department_id;

但这会引发以下错误:

SQL-Fehler: ORA-00937: not a single-group group function
00937. 00000 -  "not a single-group group function"

我找不到有关此错误的有用信息。据我所知 关于 SQL,我的代码应该可以正常工作!

我错了吗?

【问题讨论】:

  • 如果您刚开始学习 SQL,那么您应该停止在 WHERE 子句中使用隐式连接,并使用显式 JOIN 运算符。您还需要阅读 GROUP BY 运算符。

标签: plsql oracle11g


【解决方案1】:

尝试添加 group by 子句:

CREATE TABLE new_depts 
AS SELECT d.department_id, d.department_name, sum(e.salary) dept_sal 
FROM employees e, departments d 
WHERE e.department_id = d.department_id
group by d.department_id,d.department_name

更新 1

您需要在选择查询中使用 group by 子句,因为您使用的是aggregate function: sum(e.salary)。如果您使用聚合函数,那么您需要有 group by 子句。有关 group by 子句的更多信息,请参阅here

【讨论】:

    【解决方案2】:

    理解为什么 GROUP BY 子句中指定的聚合函数或列不能与选择列表中的其他非聚合表达式混合的主要概念是它们产生的值的详细程度。 SELECT 语句的选择列表只能包含产生的值与该选择列表中的其他表达式具有相同详细级别的值。

    示例 1:不正确

    SELECT avg(col1) --> level of detail of the value is aggregated 
          ,col2      --> level of detail of the value is only for one row
    FROM table_a;
    

    示例 2:正确

    SELECT avg(col1) --> level of detail of the value is aggregated
          ,col2      --> level of detail of the value is aggregated
    FROM table_a
    GROUP BY col2;
    

    通过在 GROUP BY 子句中包含一列,您可以聚合指定的列并将其详细级别从单行更改为聚合。

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2022-01-19
      相关资源
      最近更新 更多