Oracle 对Scott下的emp和dept表实现如下的查询:请找出工资大于2000的职员数最多的部门,列出部门号,工资大于2000的员工数。
时间: 2023-06-23 19:08:32 浏览: 126
可以使用以下 SQL 语句来实现该查询:
```
SELECT deptno, COUNT(*) AS emp_count
FROM emp
WHERE sal > 2000
GROUP BY deptno
HAVING COUNT(*) = (
SELECT MAX(emp_count)
FROM (
SELECT deptno, COUNT(*) AS emp_count
FROM emp
WHERE sal > 2000
GROUP BY deptno
)
)
```
解释:
1. 首先从 `emp` 表中筛选出工资大于 2000 的员工,然后按照部门号进行分组,统计每个部门工资大于 2000 的员工数。
2. 对于上一步统计出的每个部门,通过 `HAVING` 子句筛选出员工数最多的部门。
3. 最后输出该部门的部门号和工资大于 2000 的员工数。
相关问题
Oracle 对Scott下的emp和dept表实现如下的查询:请找出员工工资均大于1000的部门其员工信息【要求使用exists子查询】
可以使用以下SQL语句来实现:
```
SELECT *
FROM emp
WHERE EXISTS (
SELECT *
FROM dept
WHERE emp.deptno = dept.deptno AND dept.deptno IN (
SELECT deptno
FROM emp
GROUP BY deptno
HAVING AVG(sal) > 1000
)
);
```
该查询中,首先使用子查询找到工资平均值大于1000的部门编号,然后在主查询中使用 EXISTS 子查询来判断该部门是否存在员工工资大于1000的员工,如果存在则返回该员工信息。
注意,这里的 emp 和 dept 表都是 Scott 用户下的表,如果要在其他用户下运行,需要修改表名或者授权其他用户访问。
Oracle 对Scott下的emp和dept表实现如下的查询:请找出员工工资均大于1000的部门其员工信息【要求不使用exists子查询】。
可以使用Oracle的分组查询和HAVING子句来实现这个需求:
```
SELECT e.*
FROM emp e
JOIN dept d ON e.deptno = d.deptno
GROUP BY d.deptno
HAVING AVG(e.sal) > 1000;
```
这个查询首先将emp表和dept表通过deptno字段进行JOIN操作,然后按照deptno分组,计算每个部门的员工平均工资。最后,使用HAVING子句过滤出平均工资大于1000的部门,并返回这些部门的员工信息。
阅读全文