SQL 选择员工人数超过 2 人且薪水大于 1000 的部门名称

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/4646149/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-01 08:49:06  来源:igfitidea点击:

select dept names who have more than 2 employees whose salary is greater than 1000

sql

提问by Anshul

How would do the following in SQL

如何在 SQL 中执行以下操作

"select dept names who have more than 2 employees whose salary is greater than 1000" ?

“选择有超过 2 名员工的工资大于 1000 的部门名称”?

DeptId DeptName
------ --------
1          one
2          two
3        three

EmpId DeptId Salary
----- ------ ------
121      1    2000
122      1    2000
123      1    5000
124      1    4000
131      2    2000
132      2    6000
133      2    1000
134      2    1000
125      3    1000
126      3   20000


RESULT: one

回答by John Petrak

How about something like this?

这样的事情怎么样?

SELECT D.DeptName FROM
Department D WHERE (SELECT COUNT(*) 
                    FROM Employee E 
                    WHERE E.DeptID = D.DeptID AND
                            E.Salary > 1000) > 2

回答by D23

SELECT DEPTNAME
FROM(SELECT D.DEPTNAME,COUNT(EMPID) AS TOTEMP
     FROM DEPT AS D,EMPLOYEE AS E
     WHERE D.DEPTID=E.DEPTID AND SALARY>1000
     GROUP BY D.DEPTID
     )
WHERE TOTEMP>2;

回答by Pankaj Agarwal

select min(DEPARTMENT.DeptName) as deptname 
from DEPARTMENT
inner join employee on
DEPARTMENT.DeptId = employee.DeptId
where Salary > 1000
group by (EmpId) having count(EmpId) > =2 

回答by user763822

hope this helps

希望这可以帮助

select DeptName from DEPARTMENT inner join EMPLOYEE using (DeptId) where Salary>1000 group by DeptName having count(*)>2

回答by Deepak Varshney

select deptname from dept_1
where exists
(
SELECT DeptId,COUNT(*)        
FROM emp_1  
where salary>1000
and emp_1.deptid=dept_1.deptid   
GROUP BY DeptId 
having count(*)>2)

回答by Pankaj Singh

select D.DeptName from [Department] D where D.DeptID in 
( 
    select E.DeptId from [Employee] E
    where E.Salary > 1000
    group by E.DeptId
    having count(*) > 2
)

回答by UMAIR SHAH

1:list name of all employee who earn more than RS.100000 in a year.

1:列出年收入超过RS.100000的所有员工的姓名。

2:give the name of employee who earn heads the department where employee with employee I.D

2:提供员工姓名,员工姓名为员工所在部门的负责人

回答by onedaywhen

My main advice would be to steer clear of the HAVINGclause (see below):

我的主要建议是避开该HAVING条款(见下文):

WITH HighEarners AS
     ( SELECT EmpId, DeptId
         FROM EMPLOYEE
        WHERE Salary > 1000 ), 
     DeptmentHighEarnerTallies AS 
     ( SELECT DeptId, COUNT(*) AS HighEarnerTally
         FROM HighEarners
        GROUP 
           BY DeptId )
SELECT DeptName
  FROM DEPARTMENT NATURAL JOIN DeptmentHighEarnerTallies
 WHERE HighEarnerTally > 2;


The very early SQL implementations lacked derived tables and HAVINGwas a workaround for one of its most obvious drawbacks (how to select on the result of a set function from the SELECTclause). Once derived tables had become a thing, the need for HAVINGwent away. Sadly, HAVINGitself didn't go away (and never will) because nothing is ever removed from standard SQL. There is no need to learn HAVINGand I encourage fledgling coders to avoid using this historical hangover.

非常早期的 SQL 实现缺少派生表,并且HAVING是其最明显缺点之一的解决方法(如何从SELECT子句中选择 set 函数的结果)。一旦派生表成为一种东西,就不需要HAVING了。可悲的是,HAVING它本身并没有消失(也永远不会消失),因为标准 SQL 中没有任何内容被删除。没有必要学习HAVING,我鼓励初出茅庐的程序员避免使用这种历史遗留问题。