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"
它一直有错误,有任何建议吗?
感谢您的合作
答案 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_id
和e.S_ID
吗?
是同一类型的c.COURSE_NO
和e.C_SEC_ID
吗?