ORA-00979:不是GROUP BY表达式

时间:2011-04-07 21:04:37

标签: sql oracle oracle10g ora-00979

为什么这样做

SELECT DISTINCT FIRSTNAME, LASTNAME
FROM books, CUSTOMERS, orders, orderitems
WHERE STATE IN('FL ', 'GA')
GROUP BY orders.order#, firstname, lastname
HAVING SUM(retail*quantity) > 80  

但是从firstname, lastname移除group by时却没有?

  

ORA-00979:不是GROUP BY表达式

2 个答案:

答案 0 :(得分:2)

我可以猜到

首先执行GR​​OUP BY操作,然后执行DISTINCT。在GROUP BY子句中,您必须指明所有非聚合。例如,您不允许执行以下操作:

SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES
GROUP BY HIRE_DATE

你应该这样做:

SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES
GROUP BY HIRE_DATE,FIRST_NAME, LAST_NAME

答案 1 :(得分:1)

firstname, lastname中删除group by的情况下,您会收到该错误,因为您SELECT了{{1}中不在GROUP BY的列表达式,或者不是聚合/函数的一部分(即MIN,MAX,AVG等)。

您也可以删除DISTINCT