如何用GROUP BY+HAVING语句筛选活跃照片数超6的用户或判断其存在性?
解决活跃照片数量超过6张的用户查询问题
原SQL的问题在于错误地将active字段加入了分组条件,这会导致同一个用户若存在活跃和非活跃照片时被拆分分组,且当前的having条件无法直接筛选出活跃照片总数超过6的用户。
修改后的SQL语句(推荐写法)
SELECT user_id, COUNT(1) AS active_photo_count FROM exp_content.photos_v4 WHERE active = True -- 先过滤出所有活跃照片,提升查询效率 GROUP BY user_id -- 仅按用户ID分组统计 HAVING COUNT(1) > 6 -- 筛选活跃照片数量超过6的用户
另一种写法(无需提前过滤,直接在分组后判断)
如果业务上需要保留分组时的活跃状态判断,也可以采用此写法,但执行效率略低于上面的方案:
SELECT user_id, COUNT(1) AS active_photo_count FROM exp_content.photos_v4 GROUP BY user_id, active HAVING active = True AND COUNT(1) > 6
补充:仅判断是否存在此类用户
如果只需要确认是否有符合条件的用户,无需具体ID和数量,可以用EXISTS子句简化查询:
SELECT EXISTS ( SELECT 1 FROM exp_content.photos_v4 WHERE active = True GROUP BY user_id HAVING COUNT(1) > 6 ) AS has_users_with_more_than_6_active_photos
该查询会返回True或False,直接给出是否存在目标用户的结果。
内容的提问来源于stack exchange,提问作者Jwan622
相关产品推荐
相关产品推荐

