每个分组计算发帖个数(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;
专业分析如下:
1. **选项A**: `select id, count(name) from t1 group by id having id > 5;`
- 这个语句的`having`子句是针对`id`进行过滤,而不是针对发帖数进行过滤。因此,这个语句的作用是选择`id`大于5的发帖人,而不是发帖数超过5次的发帖人。
2. **选项B**: `select id, count(name) from t1 group by id having count(name)>5;`
- 这个语句首先将表`t1`根据`id`进行分组,然后使用`having`子句进行过滤,选择发帖数(`count(name)`)大于5的发帖人。这个语句的逻辑是正确的,能够准确地显示发帖数超过5个的发帖人。
3. **选项C**: `select id, count(name) from t1 group by id having name>5;`
- 这个语句的`having`子句是针对`name`进行过滤,而`name`是帖子的标题,不是一个数值。因此,这个语句的逻辑是不正确的。
4. **选项D**: `select id, count(name) from t1 where id > 5 group by id;`
- 这个语句的`where`子句是针对`id`进行过滤,选择`id`大于5的发帖人,然后进行分组操作。这个语句没有与发帖数进行过滤,因此不符合题意。
综上所述,选项B是唯一正确的选择,因为它正确地实现了根据发帖数进行过滤的功能。