每個分組計算發(fā)帖個數(shù)(count(name))之后,我們希望輸出結(jié)果大于5(count(name)>5)。 這里還是比較好理解的,難度在于對having的理解。我們平時用到條件子句時,它前面的關(guān)鍵詞都是where,而這里用的是having。在使用GROUP BY對數(shù)據(jù)進行分組時需要使用HAVING作為限制條件的關(guān)鍵詞。
正確答案是:B: select id, count(name) from t1 group by id having count(name)>5;
專業(yè)分析如下:
1. **選項A**: `select id, count(name) from t1 group by id having id > 5;`
- 這個語句的`having`子句是針對`id`進行過濾,而不是針對發(fā)帖數(shù)進行過濾。因此,這個語句的作用是選擇`id`大于5的發(fā)帖人,而不是發(fā)帖數(shù)超過5次的發(fā)帖人。
2. **選項B**: `select id, count(name) from t1 group by id having count(name)>5;`
- 這個語句首先將表`t1`根據(jù)`id`進行分組,然后使用`having`子句進行過濾,選擇發(fā)帖數(shù)(`count(name)`)大于5的發(fā)帖人。這個語句的邏輯是正確的,能夠準(zhǔn)確地顯示發(fā)帖數(shù)超過5個的發(fā)帖人。
3. **選項C**: `select id, count(name) from t1 group by id having name>5;`
- 這個語句的`having`子句是針對`name`進行過濾,而`name`是帖子的標(biāo)題,不是一個數(shù)值。因此,這個語句的邏輯是不正確的。
4. **選項D**: `select id, count(name) from t1 where id > 5 group by id;`
- 這個語句的`where`子句是針對`id`進行過濾,選擇`id`大于5的發(fā)帖人,然后進行分組操作。這個語句沒有與發(fā)帖數(shù)進行過濾,因此不符合題意。
綜上所述,選項B是唯一正確的選擇,因為它正確地實現(xiàn)了根據(jù)發(fā)帖數(shù)進行過濾的功能。