我正在努力争取所有部门,他们的位置,员工人数和平均工资。我尝试过这样的事情,但是我已经得到了一个"而不是一个表达的团体"错误:
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,所以如果有人能解释如何使用它或我做错了什么,我会非常感激。
答案 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 BY
为d.DEPARTMENT_NAME, l.CITY