考试报名
考试报名
考试内容
考试大纲
在线客服
返回顶部

备考刷题,请到

CDA认证小程序

Create the following database tables: CREATE TABLE department ( departid int not null primary key, deptname varchar(20) not null ); CREATE TABLE employee ( employeeid int not null, deptid int not null, ename varchar(20) not null, job varchar(10),sal decimal(10,2) ); Which of the following SQL statements is incorrect?
A. SELECT AVG(sal) FROM employee;
B. SELECT deptid,AVG(sal) FROM employee GROUP BY deptid;
C. SELECT deptid,job,AVG(sal) FROM employee GROUP BY deptid,job;
D. SELECT deptid,AVG(sal) FROM employee GROUP BY deptid HAVING job='clerk';
上一题
下一题
收藏
点赞
评论
题目解析
题目评论(0)

Fields filtered in the HAVING clause must be fields that can appear in the grouped results.

正确答案是 D: SELECT deptid,AVG(sal) FROM employee GROUP BY deptid HAVING job='clerk';

分析:
- 选项 A: `SELECT AVG(sal) FROM employee;` 这条语句是正确的。它计算了 `employee` 表中所有员工的平均工资。
- 选项 B: `SELECT deptid,AVG(sal) FROM employee GROUP BY deptid;` 这条语句也是正确的。它按部门计算了每个部门的平均工资,并按 `deptid` 分组。
- 选项 C: `SELECT deptid,job,AVG(sal) FROM employee GROUP BY deptid,job;` 这条语句也是正确的。它按部门和职位分组计算了每个部门每个职位的平均工资。
- 选项 D: `SELECT deptid,AVG(sal) FROM employee GROUP BY deptid HAVING job='clerk';` 这条语句是错误的。`HAVING` 子句通常用于过滤聚合后的结果,而不是在分组之前进行过滤。正确的方式是使用 `WHERE` 子句来过滤特定职位的员工,然后再进行分组和聚合。例如:
```sql
SELECT deptid, AVG(sal)
FROM employee
WHERE job = 'clerk'
GROUP BY deptid;
```

所以,选项 D 是错误的。