SQL Server查询GroupId关联的不同ProjID数量及查询修正
问题分析与修正方案
你的原查询问题出在GROUP BY同时包含了GroupId和ProjID,这会把每个(GroupId, ProjID)的组合作为独立分组统计,所以AAA会拆成(AAA,1)和(AAA,3)两个分组,每个分组计数1,自然不符合“统计每个GroupId关联的不同ProjID数量”的需求。
不需要使用HAVING子句,正确的做法是:
- 仅按
GroupId分组,确保每个GroupId作为一个统计单元 - 使用
COUNT(DISTINCT ProjID)来计算每个分组内不同ProjID的数量
修正后的SQL语句如下:
SELECT GroupId, COUNT(DISTINCT ProjID) AS Count FROM Immerse GROUP BY GroupId
结果验证
执行这条语句后,会得到你期望的结果:
GroupId | Count ---------+------- AAA | 2 BBB | 1 CCC | 1
解释:
COUNT(DISTINCT ProjID)会先对每个GroupId下的ProjID去重,再统计数量,所以CCC对应的ProjID都是4,去重后计数为1;AAA有1和3两个不同的ProjID,计数为2。
内容的提问来源于stack exchange,提问作者SAREKA AVINASH
相关产品推荐
相关产品推荐

