单列分组不起作用

时间:2014-02-26 15:21:00

标签: sql oracle

当我使用以下查询时,它可以工作:

select d.id, 
       d.name, 
       count(e.id) as numberofemployees
  from department d, 
       employee1 e
 where d.id=e.deptid
group by d.id, 
         d.name
order by d.id; 

但是当我使用以下查询时,它会给我错误:

select d.id, 
       d.name, 
       count(e.id) as numberofemployees
  from department d, 
       employee1 e
 where d.id=e.deptid
group by d.id 
order by d.id; 

错误如下:

  

选择d.id,d.name,count(e.id)作为员工人数

     

第1行的错误:ORA-00979:不是GROUP BY表达式

我不明白问题是什么。我认为对单列进行分组应该没问题。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:6)

在大多数DBMS实施中,GROUP BY必须包含未出现在聚合函数中的每一列(AVG()SUM()COUNT()等)。如果有两列(ID和Name)不在聚合函数中,则必须在GROUP BY子句中列出这两列。

答案 1 :(得分:2)

在第二个查询中,名称列不在group by子句中,这会导致您的错误。

因此,以下查询将产生结果:

select d.id,
       count(e.id) as numberofemployees
  from department d, 
       employee1 e
 where d.id=e.deptid
group by d.id
order by d.id; 

Ken White的回答解释了为什么会出现这种情况。