关于如何克服 ORA-00937 的任何建议?

Posted

技术标签:

【中文标题】关于如何克服 ORA-00937 的任何建议?【英文标题】:any suggestions on how to overcome ORA-00937? 【发布时间】:2014-05-19 02:58:33 【问题描述】:
select s.S_FIRST||' '||s.S_LAST, sum(c.CREDITS) from enrollment e,student s,course c
where s.s_id=e.S_ID
and c.COURSE_NO=e.C_SEC_ID
group by s.S_ID
having sum(c.credits)>12 order by s.s_id;

Error report:
SQL Error: ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"

它总是返回错误,有什么建议吗?

感谢您的合作

【问题讨论】:

【参考方案1】:

实际上,SQL 中有几个问题。试试这个...

select s.s_id, s.S_FIRST||' '||s.S_LAST name, sum(c.CREDITS) sum_credits
from enrollment e,student s,course c
where s.s_id=e.S_ID
and c.COURSE_NO=e.C_SEC_ID
group by 1, 2
having sum(c.credits) > 12 
order by s.s_id;

您必须按所有非聚合字段分组。此外,我认为您不能对不在查询中的字段进行排序(因此也需要在选择列表和分组依据中)。文档中的错误是ORA-00937。

根据您的无效数字 cmets,我认为您在 course_no 上的加入是错误的,或者学分可能不是数字或其他东西。

【讨论】:

【参考方案2】:

您需要将所有列包含在选择列表中以进行分组。看这里http://www.dba-oracle.com/t_ora_00979_not_a_group_by_expression.htm

来自文档

原因:GROUP BY 子句中没有包含所有表达式 选择子句。未包含在组中的 SELECT 表达式 函数,例如 AVG、COUNT、MAX、MIN、SUM、STDDEV 或 VARIANCE,必须 列在 GROUP BY 子句中。

操作:在 GROUP BY 子句中包含所有符合条件的 SELECT 表达式 不分组函数参数

补救措施,将选择列表中的所有列包含到您的group by 子句中。更改您的查询,如

select s.S_FIRST||' '||s.S_LAST as fullname, s.s_id, 
sum(c.CREDITS) as total_credit from enrollment e,
student s,course c
where s.s_id=e.S_ID
and c.COURSE_NO=e.C_SEC_ID
group by s.S_FIRST||' '||s.S_LAST
having total_credit > 12 
order by s.s_id;

根据 Oracle 规范错误 ORA-01722 表示 The attempted conversion of a character string to a number failed because the character string was not a valid numeric literal.

确保所有字段都是 INT 类型或相同类型。 IS c.CREDITS INT 类型?

s.s_ide.S_ID 是否属于同一类型?

c.COURSE_NOe.C_SEC_ID 是否属于同一类型?

【讨论】:

嘿兄弟,它返回了这个错误报告:SQL 错误:ORA-01722: invalid number 01722. 00000 - "invalid number" @user3651097,如果有帮助,别忘了接受答案。

以上是关于关于如何克服 ORA-00937 的任何建议?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle的“ORA-00937: 不是单组分组函数” 如何解决?

关于ORA-00979 不是 GROUP BY 表达式错误的解释

错误:ORA-00937

包以失败状态结束。 ORA-00937 没那么容易

ORA-00937: 不是单组组函数错误

sql - ORA-00937: 不是单组组函数