以下SQL语句中,错误的是() A. SELECT AVG(sal) FROM emp; B. SELECT deptno,AVG(sal) FROM emp GROUP BY deptno; C. SELECT deptno,job,AVG(sal) FROM emp GROUP BY deptno,job; D. SELECT deptno,AVG(sal) FROM emp GROUP BY deptno HAVING job=’clerk’;
时间: 2024-03-01 21:50:33 浏览: 177
答案是 D.
在 SQL 中,HAVING 关键字用于筛选分组后的结果集。而 WHERE 关键字用于筛选未分组的原始数据集。所以 HAVING 子句中可以使用 GROUP BY 子句中的聚合函数,而 WHERE 子句中不行。
在选项 D 中,HAVING 子句中使用了 job='clerk' 条件,但是 job 列没有出现在 GROUP BY 子句中,这会导致语法错误。正确的写法应该是:
```SELECT deptno,AVG(sal) FROM emp WHERE job='clerk' GROUP BY deptno;```
这样可以先通过 WHERE 子句筛选出职位是 clerk 的员工,再按照部门进行分组,并计算每个部门的平均工资。
相关问题
select e1.deptno as 部门号, e1.ename as 员工姓名, e1.sal as 工资 from emp e1 where e1.sal > (select avg(sal) from emp e2 where e1.deptno = e2.deptno) order by e1.deptno;
这是一个SQL查询语句,用于从名为“emp”的表中检索员工信息。此查询使用子查询来查找每个部门的平均工资,并选择具有高于其部门平均工资的员工。查询结果按部门号排序。
具体而言,查询选择以下列:
- e1.deptno:员工所在的部门号;
- e1.ename:员工的姓名;
- e1.sal:员工的工资。
查询使用WHERE子句来限制结果集。子查询 `(select avg(sal) from emp e2 where e1.deptno = e2.deptno)` 用于查找具有相同部门号的员工的平均工资。主查询使用WHERE子句来选择具有高于其部门平均工资的员工,即 e1.sal > (子查询)。
最后,查询使用ORDER BY子句按部门号对结果进行排序。
select max(a_sal) from (select deptno,avg(sal) a_sal from emp group by deptno);
您的问题是:从 emp 表中按部门分组,计算每个部门的平均工资,并找出最高平均工资是多少?
答案是:
SELECT MAX(a_sal) FROM (SELECT deptno, AVG(sal) AS a_sal FROM emp GROUP BY deptno);
这个查询语句会先按部门分组,计算每个部门的平均工资,并将结果命名为 a_sal。然后,外部查询会找出这些平均工资中的最大值。
阅读全文