使用 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?请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是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 将经理命令传递给员工的主要内容,如果未能解决你的问题,请参考以下文章

使用批处理命令将参数值从批处理文件传递到 sql 文件

如何将自定义子查询传递给 ADO.NET 中的 SQL 命令?

在 Python 中使用 SQL 字符串传递 SET 命令

sql查询语句的各个命令执行的标准顺序是啥?为啥?

sql查询语句的各个命令执行的标准顺序是啥?为啥?

将经理更改为员工,使用 not in 子句,使用联合命令时有些小混乱