使用 SQL 命令 groupby 将经理命令传递给员工
Posted
技术标签:
【中文标题】使用 SQL 命令 groupby 将经理命令传递给员工【英文标题】:transfering managers commands into employees, using SQL commands groupby and having 【发布时间】:2016-02-27 20:13:51 【问题描述】:EMPLOYEE(fname、minit、lname、ssn、生日、地址、性别、薪水、superssn、dno) 关键:ssn
部门(dname、dnumber、mgrssn、mgrstartdate) 键:dnumber。
项目(pname、pnumber、位置、dnum) 键:pnumber。
WORKS_ON(essn、pno、小时) KEY: (essn, pno)
DEPENDENT(essn、从属姓名、性别、日期、关系) KEY:(essn,从属名称)
我想查找从事 3 个或更多项目、使用 group by 并在相关子查询中的员工的姓氏。
我之前在找经理时也遇到过类似的问题,但现在我想找员工,我试图转换代码,这是我所拥有的:
我应该改变什么?
SELECT Lname
FROM Employee e,
Department d
WHERE (e.ssn = d.mgrssn)
AND e.ssn IN (SELECT w.essn
FROM works_on w,
Project p
WHERE w.pno = p.pnumber
GROUP BY
w.essn
HAVING COUNT(*) >= 2)
【问题讨论】:
这适用于哪个 RDBMS?请添加标签以指定您使用的是mysql
、postgresql
、sql-server
、oracle
还是db2
- 或其他完全不同的东西。
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN
语法-92 SQL 标准(20 多年前),不鼓励使用它
【参考方案1】:
您可以按如下方式更改您的查询。
select Lname
from Employee e
where e.ssn in (
select w.essn
from works_on w, Project p
where w.pno = p.pnumber
group by w.essn
having count(*) >= 3
)
【讨论】:
应该把 lname 改成 e.lname 吗? 这不是必需的,因为您将只有一个 lname 实例。虽然你可以拥有它 谢谢!最后,w.pno = p.pnumber 是必须的,因为它告诉你哪个员工在哪个项目上工作?以上是关于使用 SQL 命令 groupby 将经理命令传递给员工的主要内容,如果未能解决你的问题,请参考以下文章