每个分组计算发帖个数(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 选项是唯一正确的答案。