SQL查询:统计关联多个特征的用户ID数量
嘿,这事儿好办!我来帮你实现这个统计需求,顺便把思路和代码都讲清楚。
解决方案
核心思路
要统计关联特征数量大于1的用户总数,我们可以分两步操作:
- 先按
userid分组,计算每个用户关联的feature数量 - 再筛选出特征数量超过1的用户,最后统计这些用户的个数
完整代码示例
首先是你提供的示例表定义和测试数据:
declare @tbl table (userid int, feature nvarchar(10)) insert into @tbl(userid, feature) select 1, 'abc' insert into @tbl(userid, feature) select 1, 'xyz' insert into @tbl(userid, feature) select 2, 'abc' insert into @tbl(userid, feature) select 3, 'abc' insert into @tbl(userid, feature) select 3, 'xyz' insert into @tbl(userid, feature) select 3, 'pqr'
然后是实现统计的查询语句:
SELECT COUNT(userid) AS user_count FROM ( -- 内层子查询:筛选出特征数大于1的用户 SELECT userid FROM @tbl GROUP BY userid HAVING COUNT(feature) > 1 ) AS qualified_users
代码解释
- 内层的子查询通过
GROUP BY userid对用户分组,用COUNT(feature)统计每个用户的特征数量,再通过HAVING子句过滤掉特征数≤1的用户,只留下符合要求的userid - 外层查询直接统计这些符合条件的
userid的数量,得到的结果就是你想要的2(对应用户1和用户3)
如果你担心有重复的userid(不过分组后每个userid只会出现一次),也可以用COUNT(DISTINCT userid),结果是完全一致的。
内容的提问来源于stack exchange,提问作者Nizar
相关产品推荐
相关产品推荐

