You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不重复初始查询的前提下汇总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';

代码说明

  1. CTE缓存结果:initial_query_results 会执行一次你的原始长查询,并把结果暂存起来,后续的两个SELECT都基于这个缓存结果操作,完全避免了重复执行初始查询。
  2. 活跃用户数据:第一个SELECT直接筛选出Active = 't'的行,保留原始数据不变。
  3. 非活跃用户合并:第二个SELECT通过SUM(Sales)计算所有非活跃用户的销售总额,同时指定你需要的ID=0、Name='-'和Active='f'。
  4. 合并结果:用UNION ALL把两部分结果拼接起来,因为活跃和非活跃数据没有重叠,UNION ALL比UNION性能更好(不需要去重)。

执行这段代码后,就能得到你想要的结果表啦。

内容的提问来源于stack exchange,提问作者andi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:57:45