每个分组计算发帖个数(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;`
- 这个语句会按发帖人的编号(id)分组,并统计每个发帖人发帖的数量,但不会对发帖数量进行筛选,所以无法显示发帖数超过5个的发帖人。
- 选项 B: `select id ,count(name) from t1 group by id having count(name) > 5;`
- 这个语句首先按发帖人的编号(id)分组,并统计每个发帖人发帖的数量。然后通过 `having` 子句筛选出发帖数超过5个的发帖人。因此,这是正确的答案。
- 选项 C: `select id, count(name) from t1 where count(name)>5 group by id order by count(name);`
- 这个语句在 `where` 子句中使用了聚合函数 `count(name)`,这是不正确的。聚合函数应该在 `having` 子句中使用,而不是在 `where` 子句中。
- 选项 D: `select id ,count(name) from t1 where id > 100 group by id;`
- 这个语句会筛选出编号大于100的发帖人,并统计他们的发帖数量,但没有对发帖数量进行筛选,因此不能保证显示发帖数超过5个的发帖人。
综上所述,选项 B 是唯一正确的语句。