ORA-00979不是表达式的组?

时间:2015-01-10 16:34:59

标签: sql oracle group-by

我有以下代码抛出异常

  

Ora-00979:不是按表达式分组。

即使我删除group by子句,它仍然会出错

  

ORA-00937:不是单组组功能。

我是这个领域的新手,对联接等知识不足。如果有人请帮我解决以下问题,我将不胜感激。

select sDateTime AS Sale_Date, SUM(Amount) AS Sale, SerName 
FROM SALES natural join sales_Description natural join Services 
where ((sDateTime >= to_date('2015-01-01','yyyy-MM-dd')) 
  and (sDateTime <= to_date('2015-01-09','yyyy-MM-dd'))) 
  GROUP BY to_char(sDateTime,'yyyy-MM-dd') 

2 个答案:

答案 0 :(得分:1)

SerName子句中未包含GROUP BY列。您必须将其包含在GROUP BY子句中或将其汇总(MAXMIN等)。

尝试将您的查询更改为:

SELECT sDateTime AS Sale_Date, SUM(Amount) AS Sale, SerName 
FROM SALES natural join sales_Description natural join Services 
WHERE ((sDateTime >= to_date('2015-01-01','yyyy-MM-dd')) 
  AND (sDateTime <= to_date('2015-01-09','yyyy-MM-dd'))) 
GROUP BY to_char(sDateTime,'yyyy-MM-dd'), SerName

无论如何,我不知道这是否是你想要的结果。

答案 1 :(得分:0)

第一个错误not a group by归因于以下内容 -

GROUP BY to_char(sDateTime,'yyyy-MM-dd'),

您需要在to_char中拥有相同的select或将group by更改为sDateTime

第二次出现错误not a single-group group错误,因为您按表达式删除了分组。您需要columns select list aggregating行。{/ p>

尝试以下方法 -

    SELECT to_char(sDateTime,'yyyy-MM-dd') AS       Sale_Date, 
SerName, 
SUM(Amount) AS Sale
       FROM SALES natural join sales_Description natural join Services 
     WHERE ((sDateTime >= to_date('2015-01-01','yyyy-MM-dd')) 
      AND (sDateTime <= to_date('2015-01-09','yyyy-MM-dd'))) 
       GROUP BY to_char(sDateTime,'yyyy-MM-dd'), SerName