如何在不重复初始查询的前提下汇总SQL表中的非活跃用户行?
解决方案:无需重复执行初始查询实现需求
当然可以实现!你只需要借助**公共表表达式(CTE)**来缓存初始长SQL查询的结果,这样就能避免重复执行它,同时完成非活跃用户数据的合并。具体步骤如下:
实现代码
WITH initial_query_results AS ( -- 这里替换成你的原始长SQL查询 SELECT ID, Name, Active, Sales FROM t ) -- 保留所有活跃用户的原始数据 SELECT ID, Name, Active, Sales FROM initial_query_results WHERE Active = 't' UNION ALL -- 汇总合并非活跃用户的数据 SELECT 0 AS ID, '-' AS Name, 'f' AS Active, SUM(Sales) AS Sales FROM initial_query_results WHERE Active = 'f';
代码说明
- CTE缓存结果:
initial_query_results会执行一次你的原始长查询,并把结果暂存起来,后续的两个SELECT都基于这个缓存结果操作,完全避免了重复执行初始查询。 - 活跃用户数据:第一个SELECT直接筛选出
Active = 't'的行,保留原始数据不变。 - 非活跃用户合并:第二个SELECT通过
SUM(Sales)计算所有非活跃用户的销售总额,同时指定你需要的ID=0、Name='-'和Active='f'。 - 合并结果:用
UNION ALL把两部分结果拼接起来,因为活跃和非活跃数据没有重叠,UNION ALL比UNION性能更好(不需要去重)。
执行这段代码后,就能得到你想要的结果表啦。
内容的提问来源于stack exchange,提问作者andi
相关产品推荐
相关产品推荐

