如何用单SELECT语句统计交易次数超1次的用户数量?
单条SELECT实现交易次数超1次的用户统计
当然可以用单条SELECT语句完成需求,下面是两种简洁的实现方式:
方式一:嵌套子查询(最直观)
直接将原CTE中的分组筛选逻辑作为内联子查询,外层统计符合条件的用户数:
SELECT COUNT(user_id) AS multi_trans_user_count FROM ( SELECT user_id FROM table GROUP BY user_id HAVING COUNT(transaction_id) > 1 ) AS filtered_users
这种写法和你原来的CTE逻辑完全等价,只是把CTE换成了子查询,大部分数据库会生成相同的执行计划,可读性和性能都表现不错。
方式二:聚合筛选直接统计
通过GROUP BY结合HAVING筛选后,直接统计符合条件的用户分组数:
SELECT COUNT(*) AS multi_trans_user_count FROM table GROUP BY user_id HAVING COUNT(transaction_id) > 1
这里GROUP BY先按用户ID分组,HAVING筛选出交易次数超过1的用户分组,最后COUNT(*)直接统计这些分组的数量(每个分组对应唯一用户)。
注意:记得把语句中的
table替换成你的实际数据表名称。
内容的提问来源于stack exchange,提问作者m_lovric513
相关产品推荐
相关产品推荐

