看似基本的查询给了我很多问题。我完成了一个类似但似乎无法做到这一点。我有三张桌子,我正在寻找:
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;
答案 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