0
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"

它不断返回错误,有什么建议吗?

谢谢你的合作

4

2 回答 2

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 类型或相同类型。是c.CREDITSINT 类型吗?

s.s_ide.S_ID同类型的?

c.COURSE_NOe.C_SEC_ID同类型的?

于 2014-05-19T03:03:15.040 回答
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 上的加入是错误的,或者学分可能不是数字或其他东西。

于 2014-05-19T03:02:14.963 回答