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

备考刷题,请到

CDA认证小程序

(复合题)表 t1 中有 id、name、salary 3 列,如果表 t1 是一个论坛的发帖信息表,id 是发帖人的编号,name 是帖子的标题,salary 是每次发帖论坛奖励的分数。 (4)显示发帖数超过 5 个的语句是()。
A. select id,count(name) from t1 group by id;
B. select id, count(name) from t1 group by id having count(name)>5;
C. select id, count(name) from t1 where count(name)>5 group by id order by count(name);
D. select id, count(name) from t1 where id > 100 group by id;
上一题
下一题
收藏
点赞
评论
题目解析
题目评论(0)

每个分组计算发帖个数(count(name))之后,我们希望输出结果大于5(count(name)>5)。 这里还是比较好理解的,难度在于对 having 的理解。我们平时用到条件子句时,它前面的关键词都是 where,而这里用的是 having。在使用group by 对数据进行分组时需要使用 having 作为限制条件的关键词。

正确答案是:B: select id, count(name) from t1 group by id having count(name)>5;

### 专业分析:

- **A: select id,count(name) from t1 group by id;**
- 这条语句会返回每个发帖人的编号及其发帖数量,但不会筛选出发帖数超过 5 个的发帖人。

- **B: select id, count(name) from t1 group by id having count(name)>5;**
- 这条语句首先按发帖人的编号分组,然后使用 `HAVING` 子句筛选出发帖数超过 5 个的发帖人。`HAVING` 子句通常用于过滤分组后的结果,因此这条语句是正确的。

- **C: select id, count(name) from t1 where count(name)>5 group by id order by count(name);**
- 这条语句是错误的,因为 `WHERE` 子句不能直接使用聚合函数 `count(name)`。聚合函数通常在 `HAVING` 子句中使用。

- **D: select id, count(name) from t1 where id > 100 group by id;**
- 这条语句会返回发帖人编号大于 100 的发帖人的编号及其发帖数量,但不会筛选出发帖数超过 5 个的发帖人。

因此,B 选项是唯一正确的答案。