SQL 组错误 ORA-00979
Posted
技术标签:
【中文标题】SQL 组错误 ORA-00979【英文标题】:SQL Group By error ORA-00979 【发布时间】:2014-12-24 01:02:51 【问题描述】:我正在尝试给出这个查询:
select s_name, course from Student group by course;
但我得到一个错误(ORA-00979 Not a GROUP BY EXPRESSION)。
我想列出同一课程中所有学生的姓名。 还有另一种方法吗?如果没有,实现此查询的正确方法是什么?如果有人能给我所需的确切代码,我将不胜感激。
【问题讨论】:
s_name 应该在 GROUP BY 中或从选择列表中删除 我真的不太懂SQL,请问你能输入准确的代码吗? 我想列出来自同一课程(包含在“课程”中)的所有学生的姓名(包含在“s_name”中)。我相信“分组”命令可以完成这项工作,但我不确定。 确切的代码取决于你想要什么 那么你确实想要排序(ORDER BY),而不是分组。 【参考方案1】:一种变体(Oracle 11g):
select course, listagg(s_name, ', ') within group (order by s_name)
from student
group by course;
Oracle 10g(未记录的秘密函数wm_concat)
select course, wm_concat(s_name)
from student
group by course;
【讨论】:
感谢您的回答,虽然我不知道我必须使用 ORDER BY 而不是 GROUP BY 才能达到预期的效果。 @Don't be Evil Irony 没关系,我不知道 wm_concat 存在,所以它对我很有用。 天哪,这带来了甚至更好的结果,但是我的老师甚至不了解秘密的 wm_concat 函数。感谢您的帮助。【参考方案2】:对于你想要的,你不应该使用GROUP BY
。
GROUP BY 的目的是汇总每个组的信息。
由于您希望了解每门课程的详细信息,因此您应该使用ORDER BY
来确保您的输出与同一课程中的学生一起列出。
select s_name, course
from Student
order by course
有关GROUP BY
用途的示例,请尝试以下操作:
select course, COUNT(*) as NumStudents
from Student
group by course
【讨论】:
谢谢。感谢您提供的简化示例,我终于知道了使用 GROUP BY 表达式的位置以及如何使用。以上是关于SQL 组错误 ORA-00979的主要内容,如果未能解决你的问题,请参考以下文章
关于ORA-00979 不是 GROUP BY 表达式错误的解释
SQLSyntaxErrorException: ORA-00979: 不是 GROUP BY 表达式
错误 - ORA-00979: 不是 GROUP BY 表达式,但在我删除 f.film_no AS "Film Number" 时有效