> ora-00979: not a group by expression
时间: 2023-04-25 22:01:07 浏览: 981
ORA-00979是Oracle数据库的错误代码,表示在使用GROUP BY语句时,SELECT语句中的某些列没有被包含在GROUP BY子句中。
这个错误通常发生在使用聚合函数(如SUM、AVG、COUNT等)时,因为这些函数需要将数据按照指定的列进行分组计算。如果SELECT语句中的列没有被包含在GROUP BY子句中,Oracle就无法确定如何对这些列进行分组计算,从而导致错误。
解决这个问题的方法是在GROUP BY子句中包含所有SELECT语句中的列,或者使用聚合函数对这些列进行计算。例如,如果SELECT语句中包含了列A、B和C,那么正确的GROUP BY子句应该是GROUP BY A, B, C,或者使用聚合函数对这些列进行计算,例如SELECT A, SUM(B), AVG(C) FROM table GROUP BY A。
相关问题
ora-00979: not a group by expression
ORA-00979 错误是一个 Oracle 数据库的错误代码,它表示 SQL 查询语句中的 GROUP BY 子句使用不当。
在使用 GROUP BY 子句时,需要将 SELECT 语句中所有的列都包含在 GROUP BY 子句中,以确保查询结果正确。如果 SELECT 语句中的列没有全部包含在 GROUP BY 子句中,就会出现 ORA-00979 错误。
解决这个问题的方法是,检查 SQL 查询语句中的 GROUP BY 子句,并确保其中包含了 SELECT 语句中的所有列。如果查询中使用了聚合函数,比如 SUM、COUNT、AVG 等,也需要将这些列包含在 GROUP BY 子句中。
但是这样会报错:ORA-00979: not a GROUP BY expression
是的,您是正确的,如果使用通配符 "*" 来选择所有列,那么在 GROUP BY 子句中也必须包含所有选择的列,否则会出现 ORA-00979 错误,因为在 GROUP BY 子句中必须包含 SELECT 列表中的所有非聚合列。
如果您想选择所有列,可以将所有列都列出来,如下所示:
```
SELECT a.*, b.*, c.*
FROM sipm9 a, sipm9_objof b, sipm12 c
WHERE a.id = b.itemid1 AND b.itemid2 = c.id
GROUP BY a.id, a.name, b.col1, b.col2, ..., c.col1, c.col2, ...
HAVING SUM(c.id) > 5;
```
需要将所有列都列出来,这可能会使查询变得冗长,并且当表结构发生变化时,需要手动更新查询。因此,建议在 SELECT 子句中明确列出需要的列,而不是使用通配符。
阅读全文