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

如何在单条SQL中让同一列值被多个CASE条件重复统计?

解决方案

你可以通过交叉连接(CROSS JOIN)配合VALUES子句实现同一行数据对应多个统计分类的需求,无需嵌套查询、CTE或自连接,具体SQL如下:

SELECT 
    report_month,
    starts_category,
    SUM(num_orders) AS total_orders
FROM 
    your_table_name
CROSS JOIN 
    (VALUES 
        ('Gross Starts'), 
        ('Net Starts')
    ) AS categories(starts_category)
WHERE 
    (starts_category = 'Gross Starts' AND payment_disposition IN ('Free Trial', 'Pre-paid'))
    OR 
    (starts_category = 'Net Starts' AND payment_disposition IN ('Payup', 'Pre-paid'))
GROUP BY 
    report_month, starts_category;

原理说明

  1. VALUES ('Gross Starts'), ('Net Starts') 生成包含两个统计分类的临时数据集
  2. CROSS JOIN 将原表每一行与两个分类各匹配一次,把符合多分类条件的行复制为对应数量的条目
  3. WHERE 子句过滤每个分类对应的有效payment_disposition类型:
    • 分类为Gross Starts时,仅保留Free Trial和Pre-paid的行
    • 分类为Net Starts时,仅保留Payup和Pre-paid的行
  4. 最后按report_month和starts_category分组求和,即可让Pre-paid同时被统计到两个分类中

这种方式不会像自连接那样导致数据量指数级增长,每个原始行最多生成2条数据,性能可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:18:19