关于如何克服 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_id
和 e.S_ID
是否属于同一类型?
c.COURSE_NO
和 e.C_SEC_ID
是否属于同一类型?
【讨论】:
嘿兄弟,它返回了这个错误报告:SQL 错误:ORA-01722: invalid number 01722. 00000 - "invalid number" @user3651097,如果有帮助,别忘了接受答案。以上是关于关于如何克服 ORA-00937 的任何建议?的主要内容,如果未能解决你的问题,请参考以下文章
Oracle的“ORA-00937: 不是单组分组函数” 如何解决?