2017-05-07 61 views
2

enter image description hereSQL:使用不同的方式6项条款,以获得相同的查询

问:

对于有五个以上的员工每个部门,获取 部门数量和员工人数谁使 超过40,000美元。

正确答案为:

select dnumber,count(*) 
from department,employee 
where dnumber=dno and salary>40000 and 
    dno in (select dno from employee group by dno having count(*)>5) 
group by dnumber; 

ANSWER2:

SELECT Dnumber , COUNT(*) 
    FROM  DEPARTMENT, EMPLOYEE 
    WHERE Dnumber= Dno AND Salary > 40,000 
    GROUP BY Dnumber 
    HAVING COUNT(*)>5; 

链接到课程:https://www.mscs.mu.edu/~praveen/Teaching/Fa06/Db/Lectures/ch8-queries.sql

ANSWER2是我的尝试。我不确定这是否正确。我比第一个答案更直观。他们是一样的吗?如果不是,我的方法有什么问题?

+1

您的查询要求该部门有超过5名员工使40k。不只是5个以上,然后计算出规定工资的员工(可能少于5个) – Donnie

回答

1

不,这两个查询不返回相同的结果集,并且您的查询不符合要求。

您的查询只列出那些部门,其中有5名以上员工,并且这些员工的数量为4万。但要求说,首先确定有5名以上员工的部门名单,然后列出获得4万多名员工的员工人数。

如果一个部门有6名员工,但其中只有1个员工的收入超过40k,那么您的查询不会选择这个,但第一个会。

但是,我不认为第一个查询是完全正确的,要么是因为超过5名员工的部门,而是没有超过40k的部门不会显示在列表中。我会用一个左连接:

select dnumber,count(employee.dno) 
from department 
left join employee on department.dnumber=employee.dno and employee.salary>40000 
where dno in (select dno from employee group by dno having count(*)>5) 
group by dnumber; 
相关问题