SQL查询:统计无drawing、singing爱好的用户总数量
解决方法
我们可以通过排除法实现需求:先筛选出所有拥有drawing或singing爱好的用户ID,再统计剩余的用户总量即可,以下是两种常用的实现写法:
写法1:使用NOT IN子查询(可读性更高)
SELECT COUNT(*) AS qualified_user_count FROM users WHERE id NOT IN ( SELECT DISTINCT user_id FROM hobbies WHERE hobby IN ('drawing', 'singing') );
说明:内层子查询先去重拿到所有有drawing或singing爱好的用户ID,外层直接统计不在这个ID集合里的用户总数,和示例数据匹配的查询结果为1。
写法2:使用左连接过滤(大数据量下性能更优)
SELECT COUNT(DISTINCT u.id) AS qualified_user_count FROM users u LEFT JOIN hobbies h ON u.id = h.user_id AND h.hobby IN ('drawing', 'singing') WHERE h.id IS NULL;
说明:通过左连接匹配用户的drawing/singing爱好记录,匹配不到的就是没有这两类爱好的用户,直接统计即可得到结果。
内容的提问来源于stack exchange,提问作者hhaslam11
相关产品推荐
相关产品推荐

