千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 深入解读ORA-00979错误

深入解读ORA-00979错误

来源:千锋教育
发布人:xqq
时间: 2023-11-24 06:28:30 1700778510

ORA-00979是Oracle数据库的一种错误类型,错误信息为“not a GROUP BY expression“,错误一般发生在SQL语句中使用了GROUP BY关键字,但是SELECT语句中的列名没有在GROUP BY中出现,或者SELECT语句中使用了聚合函数,但是却没有在GROUP BY子句中出现。本文将围绕ORA-00979错误展开,从多个方面对其进行详细阐述,帮助读者更好地理解该错误。

一、概述

ORA-00979是Oracle数据库一个常见的错误类型,常见在GROUP BY查询中。当SQL中GROUP BY子句中的字段和SELECT语句中的字段不一致时,此错误就会被触发。这种错误类型会导致查询失败,因为在GROUP BY查询中,SQL必须知道如何分组计算结果集。该错误可以通过正确匹配查询语句中GROUP BY和SELECT语句中的字段来避免。

二、引起ORA-00979错误的原因

ORA-00979错误的主要原因是在GROUP BY查询语句中SELECT语句中的列名没有在GROUP BY中出现,或者在SELECT语句中使用了聚合函数,但是却没有在GROUP BY子句中出现。例如,下面的SQL语句就可能会引起ORA-00979错误:


SELECT column1, column2, COUNT(*)
FROM table1
GROUP BY column1

由于SELECT语句中的column2没有在GROUP BY中出现,此SQL语句将引发ORA-00979错误。正确的写法应该是:


SELECT column1, column2, COUNT(*)
FROM table1
GROUP BY column1, column2

三、解决ORA-00979错误的方法

避免ORA-00979错误的最简单的方法就是在GROUP BY中列出所有SELECT语句中的列名。如果GROUP BY子句中有的列在SELECT语句中没有出现,那么需要检查查询的目的,从而决定该列是不是在GROUP BY中遗漏了。对于使用聚合函数的SELECT语句,必须在GROUP BY子句中添加所有非聚合的列。

以下是几个示例来解释如何解决ORA-00979错误。

示例1:使用所有的列名

以下代码通过在GROUP BY中包括所有SELECT列,来避免ORA-00979错误。


SELECT column1, column2, COUNT(*)
FROM table1
GROUP BY column1, column2

示例2:使用列的别名

以下代码使用列别名来避免ORA-00979错误。在这个例子中,SELECT语句中的COUNT(*)被赋予了别名'num_of_rows'。


SELECT column1, column2, COUNT(*) AS num_of_rows
FROM table1
GROUP BY column1, column2

示例3:使用表达式

以下代码使用表达式来避免ORA-00979错误。


SELECT TO_CHAR(order_date,'YYYY-MM') AS month, SUM(sales_amount)
FROM sales
GROUP BY TO_CHAR(order_date,'YYYY-MM')

四、其他应用

在某些情况下,即使所有SELECT列都已在GROUP BY子句中出现,ORA-00979错误仍然可能发生。当查询的目的是为了找出有重复值的结果时,此错误可能会发生。例如,下面的SQL查询需要查找具有重复列1的所有结果:


SELECT column1, column2
FROM table1
WHERE column1 IN (
  SELECT column1
  FROM table1
  GROUP BY column1
  HAVING COUNT(*) > 1
)

在这个例子中,内部查询返回所有具有重复列1值的行。但是,在外部查询中,GROUP BY子句必须与内部查询中的GROUP BY子句匹配,否则将触发ORA-00979错误。正确的写法应该是:


SELECT column1, column2
FROM table1
WHERE column1 IN (
  SELECT column1
  FROM table1
  GROUP BY column1
  HAVING COUNT(*) > 1
)
GROUP BY column1, column2

五、总结

ORA-00979错误与GROUP BY子句的使用相关。未在GROUP BY子句中列出SELECT语句中的列名或使用聚合函数而在GROUP BY子句中未列出非聚合列名都会引发此错误。要解决ORA-00979错误,需要确保在GROUP BY子句中包括所有SELECT语句中的列名,或使用别名或表达式列,以便在GROUP BY子句中列出SELECT语句中的所有列。

tags: os.makedir
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT