如何在SQL中执行以下操作
“选择员工人数超过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
答案 0 :(得分:12)
这样的事情怎么样?
SELECT D.DeptName FROM
Department D WHERE (SELECT COUNT(*)
FROM Employee E
WHERE E.DeptID = D.DeptID AND
E.Salary > 1000) > 2
答案 1 :(得分:4)
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;
答案 2 :(得分:2)
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
答案 3 :(得分:1)
希望这会有所帮助
select DeptName from DEPARTMENT inner join EMPLOYEE using (DeptId) where Salary>1000 group by DeptName having count(*)>2
答案 4 :(得分:0)
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)
答案 5 :(得分:0)
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
)
答案 6 :(得分:0)
1:列出一年内收入超过RS.100000的所有员工的名称。
2:将雇员的姓名命名为员工I.D
的部门答案 7 :(得分:-2)
我的主要建议是避开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;
早期的SQL实现缺少派生表,而HAVING
是其最明显缺点之一的解决方法(如何从SELECT
子句中选择set函数的结果)。一旦派生表成为一种东西,HAVING
的需求就消失了。遗憾的是,HAVING
本身并没有消失(而且永远不会消失)因为标准SQL中没有任何东西被删除。没有必要学习HAVING
,我鼓励刚刚起步的程序员避免使用这种历史宿醉。