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

时间:2014-05-19 02:58:33

标签: sql ora-00937

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"

它一直有错误,有任何建议吗?

感谢您的合作

2 个答案:

答案 0 :(得分:0)

实际上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

根据你的无效号码评论,我认为你的加入在course_no上是错误的,或者也许积分不是数字或其他东西。

答案 1 :(得分:0)

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

来自文档

  

原因:GROUP BY子句不包含中的所有表达式   SELECT子句。 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吗?