SQL - 获取每个部门的平均工资和该部门教授的课程数量

时间:2016-09-24 03:53:26

标签: mysql sql

看似基本的查询给了我很多问题。我完成了一个类似但似乎无法做到这一点。我有三张桌子,我正在寻找:

CM - 用字段描述公司中的部门           DEPT ,BUDGET

EM - 描述字段 ID ,NAME,DEPT,SALARY

的员工

CR - 介绍使用字段 Cnum ,部门,ID

教授的课程

粗体字段是主键。

我认为这会立即奏效,但它只返回了一个部门,其中包含了enitre薪水栏的平均值:

 select CM.Dept, CM.Budget, avg(EM.Salary), count(distinct(CR.Cnum)) 
 from CM join EM join CR 
 where CM.DEPT = EM.DEPT and CM.DEPT = CR.DEPT 
 group by CM.DEPT;

1 个答案:

答案 0 :(得分:0)

就像@sgeddes暗示你的描述暗示了一些固定列(CM.Dept,CM.Budget)的数据摘要。这在SQL语言中意味着使用group by。 Group by要求指定您要分组的列以及不在分组中的任何其他列需要聚合函数,更多信息http://www.w3schools.com/sql/sql_groupby.asp。也许如下所示。该网站还谈到了加入的使用。

select CM.Dept, CM.Budget, avg(EM.Salary), count(distinct(CR.Cnum)) 
from CM, EM, CR 
where CM.DEPT = EM.DEPT and CM.DEPT = CR.DEPT
group by CM.Dept, CM.Budget

修改 在你理解了“分组依据”的概念并拥有一些工作代码后,它就会出现 使用JOIN语法用逗号替换FROM的最佳实践。它看起来像下面的东西。 JOIN也在上面的链接中解释。

select CM.Dept, CM.Budget, avg(EM.Salary), count(distinct(CR.Cnum)) 
from CM
INNER JOIN EM 
ON CM.DEPT = EM.DEPT
INNER JOIN CR 
ON CM.DEPT = CR.DEPT
group by CM.Dept, CM.Budget