sql使用GROUPBY不仅仅是一个表

sql使用GROUPBY不仅仅是一个表,sql,Sql,我试图得到所有部门的工资,他们的位置,员工人数和平均工资。我尝试过类似的方法,但出现了一个“非表达式分组”错误: 我从未在多个表上使用过group by,因此如果有人能解释如何使用它或我做错了什么,我将不胜感激。您需要在group by子句中添加非聚合字段 试着这样做: SELECT d.DEPARTMENT_NAME, l.CITY, count(e.FIRST_NAME), avg(e.SALARY) FROM DEPARTMENTS d, LOCATIONS l, EMPLOYEE

我试图得到所有部门的工资,他们的位置,员工人数和平均工资。我尝试过类似的方法,但出现了一个“非表达式分组”错误:


我从未在多个表上使用过group by,因此如果有人能解释如何使用它或我做错了什么,我将不胜感激。

您需要在
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

正确的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\u NAME,l.CITY
,因此
分组依据为
d.DEPARTMENT\u NAME,l.CITY

 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;