You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在单SQL查询中统计特定类型商品的价格总和(规避子查询)

最优解决方案:使用窗口函数(Window Functions)

嘿,这个场景我太熟悉了——既要查全量商品数据,又要同时拿到特定分类的总价,还得避免子查询拖垮性能。直接用窗口函数就完美解决,只需要一次表扫描,性能拉满。

给你写个具体的SQL示例,直接替换你的基础查询就行:

SELECT 
    product.name, 
    product.type, 
    product.price,
    -- 用CASE筛选符合条件的商品,SUM结合窗口函数计算全局总和
    SUM(CASE WHEN product.type IN (1, 2) THEN product.price ELSE 0 END) OVER () AS total_target_price
FROM product;

为什么这比子查询好?

  • 性能优势:窗口函数只需要扫描一次product表,全程在同一次查询中完成计算。而如果用子查询(比如SELECT ..., (SELECT SUM(price) FROM product WHERE type IN (1,2)) FROM product),数据库会为每一行商品都执行一次子查询,数据量越大性能越差,复杂业务场景下简直是灾难。
  • 结果完整性:窗口函数不会像GROUP BY那样合并行,你能拿到每一条商品的完整信息,同时在每行都能看到目标分类的总价(如果觉得每行重复显示总价没必要,后续业务层过滤即可,SQL层面这样是最灵活的)。

如果之后你需要按其他维度(比如按商品品牌分组统计目标类型总价),只需要调整OVER()里的内容就行,比如OVER(PARTITION BY brand),扩展性超强。

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

火山引擎 最新活动