SQL查询解决混淆,被group by和having子句混淆
SQL query solution confusion, confused by group by and having clause
所以基本上这是数据库:
考虑下面给出的 COMPANY 数据库的关系模式
EMPLOYEE (fmane, minit, lname, ssn, birthdate, address, sex, salary, superssn, dno) KEY: ssn
DEPARTMENT (dname, dnumber, mgrssn, mgrstartdate) KEY: dnumber.
PROJECT (pname, pnumber, plocation, dnum) KEY: pnumber.
WORKS_ON (essn, pno, hours) KEY: (essn, pno)
DEPENDENT (essn, dependent-name, sex, bdate, relationship) KEY: (essn, dependent-name)
问题是:
提供在克利夫兰从事两个或多个项目的经理的姓氏和 SSN。
修正方案是这样的:
select Lname
from Employee e, Department d
where (e.ssn = d.mgrssn)
and ssn in (
select w.essn
from works_on w, Project p
where w.pno = p.pnumber
and p.plocation = 'Cleveland'
group by w.essn
having count(*) >= 2
)
我的问题是:
- 为什么要添加works_on?
- 员工e和部门d,为什么都需要?我以为我们只是在寻找员工
- 最后,最令人困惑的部分是按 w.essn 进行分组,其中 count(*) >= 2,
>=2 部分应该用于项目 p 吗?因为我们发现
大于 2 的项目编号?
大家有空的话,能不能在正确的解法旁边放个标示给大家看看
哪个部分属于哪个员工以及为什么需要他们。非常感谢。
我们可以试试。希望这可以帮助。
你的问题是:
2.employeee和d部门,为什么都需要?我以为我们只找到 employee
不是,不是找员工,是找经理
1.Why是添加的works_on吗?
没有 works_on,你怎么知道**哪个员工在哪个项目上工作?**
3.finally,最令人困惑的部分是 group by w.essn having count() >= 2, >=2 部分应该用于项目 p 而不是?因为我们要找出大于 2 的项目编号?*
您是在寻找涉及 2 名或更多员工的项目,还是正在寻找参与过 2 名或更多项目的员工?
所以基本上这是数据库: 考虑下面给出的 COMPANY 数据库的关系模式
EMPLOYEE (fmane, minit, lname, ssn, birthdate, address, sex, salary, superssn, dno) KEY: ssn
DEPARTMENT (dname, dnumber, mgrssn, mgrstartdate) KEY: dnumber.
PROJECT (pname, pnumber, plocation, dnum) KEY: pnumber.
WORKS_ON (essn, pno, hours) KEY: (essn, pno)
DEPENDENT (essn, dependent-name, sex, bdate, relationship) KEY: (essn, dependent-name)
问题是:
提供在克利夫兰从事两个或多个项目的经理的姓氏和 SSN。
修正方案是这样的:
select Lname
from Employee e, Department d
where (e.ssn = d.mgrssn)
and ssn in (
select w.essn
from works_on w, Project p
where w.pno = p.pnumber
and p.plocation = 'Cleveland'
group by w.essn
having count(*) >= 2
)
我的问题是:
- 为什么要添加works_on?
- 员工e和部门d,为什么都需要?我以为我们只是在寻找员工
- 最后,最令人困惑的部分是按 w.essn 进行分组,其中 count(*) >= 2, >=2 部分应该用于项目 p 吗?因为我们发现 大于 2 的项目编号?
大家有空的话,能不能在正确的解法旁边放个标示给大家看看 哪个部分属于哪个员工以及为什么需要他们。非常感谢。
我们可以试试。希望这可以帮助。 你的问题是:
2.employeee和d部门,为什么都需要?我以为我们只找到 employee
不是,不是找员工,是找经理
1.Why是添加的works_on吗?
没有 works_on,你怎么知道**哪个员工在哪个项目上工作?**
3.finally,最令人困惑的部分是 group by w.essn having count() >= 2, >=2 部分应该用于项目 p 而不是?因为我们要找出大于 2 的项目编号?*
您是在寻找涉及 2 名或更多员工的项目,还是正在寻找参与过 2 名或更多项目的员工?