使用group by的sql不仅仅是一个表

时间:2014-05-22 07:05:35

标签: sql

我正在努力争取所有部门,他们的位置,员工人数和平均工资。我尝试过这样的事情,但是我已经得到了一个"而不是一个表达的团体"错误:

 SELECT d.DEPARTMENT_NAME, l.CITY, count(e.FIRST_NAME), avg(e.SALARY)
   FROM DEPARTMENTS d, LOCATIONS l, EMPLOYEES e
  WHERE d.DEPARTMENT_ID = e.DEPARTMENT_ID
    AND d.LOCATION_ID = l.LOCATION_ID
  GROUP BY d.department_id, l.LOCATION_ID, e.DEPARTMENT_ID;

我从来没有在多个表上使用group by,所以如果有人能解释如何使用它或我做错了什么,我会非常感激。

2 个答案:

答案 0 :(得分:3)

您需要在GROUP BY子句中添加非聚合字段。

尝试这种方式:

 SELECT d.DEPARTMENT_NAME, l.CITY, count(e.FIRST_NAME), avg(e.SALARY)
   FROM DEPARTMENTS d, LOCATIONS l, EMPLOYEES e
  WHERE d.DEPARTMENT_ID = e.DEPARTMENT_ID
    AND d.LOCATION_ID = l.LOCATION_ID
  GROUP BY d.DEPARTMENT_NAME, l.CITY

答案 1 :(得分:1)

正确的SQL应该是:

 SELECT d.DEPARTMENT_NAME, l.CITY, count(e.FIRST_NAME), avg(e.SALARY)
   FROM DEPARTMENTS d, LOCATIONS l, EMPLOYEES e
  WHERE d.DEPARTMENT_ID = e.DEPARTMENT_ID
    AND d.LOCATION_ID = l.LOCATION_ID
  GROUP BY d.DEPARTMENT_NAME, l.CITY;

为什么:

因为select列表中的每个非聚合列都必须包含在GROUP BY子句中。此处非汇总列为d.DEPARTMENT_NAME, l.CITY,因此GROUP BYd.DEPARTMENT_NAME, l.CITY