SQL使用SUM计算订单总金额时ItemPrice>500条件的放置位置
SQL筛选条件放置位置说明
有两种可选的放置方案,适配不同的查询需求:
1. 放在WHERE子句(推荐绝大多数场景使用)
如果你的整个查询只需要处理单价高于500的条目,直接把OrdIt.ItemPrice > 500加在WHERE条件中即可,数据库会先过滤掉所有不符合要求的行,再执行聚合计算,执行效率更高。
参考语句结构:
SELECT SUM((OrdIt.ItemPrice - OrdIt.DiscountAmount) * OrdIt.Quantity) As TotalAmount FROM OrderItems OrdIt INNER JOIN Orders Ord ON OrdIt.OrderId = Ord.OrderId WHERE Ord.CustomerId = 你的目标客户ID -- 原有特定客户筛选条件 AND OrdIt.ItemPrice > 500 -- 新增单价筛选条件
2. 放在聚合函数内部(适配多指标统计场景)
如果同个查询中你还需要同时统计其他包含全量条目的指标(比如所有商品的总金额、单价低于500的商品总金额等),不想修改WHERE子句影响其他计算,就把条件写在SUM函数的逻辑里,用CASE WHEN做判断:
修改后的聚合语句:
SUM( CASE WHEN OrdIt.ItemPrice > 500 THEN (OrdIt.ItemPrice - OrdIt.DiscountAmount) * OrdIt.Quantity ELSE 0 END ) As TotalAmount
不符合单价要求的条目会按0计入总和,不会影响最终计算结果。
内容的提问来源于stack exchange,提问作者caleb marincel
相关产品推荐
相关产品推荐

