在SQL中,SUM
与 CASE WHEN
的结合常用于条件聚合,即根据某些条件对数据进行分组并求和。以下是一个基本的例子,展示了如何使用 SUM
和 CASE WHEN
语句。
假设我们有一个名为 orders
的表,其中包含以下字段:
order_id
(订单ID)product_id
(产品ID)quantity
(购买数量)status
(订单状态,如 'shipped', 'cancelled', 'pending' 等)
如果我们想计算已发货('shipped')的产品的总数量,我们可以使用 SUM
和 CASE WHEN
语句如下:
SELECT
SUM(CASE WHEN status = 'shipped' THEN quantity ELSE 0 END) AS total_shipped_quantity
FROM
orders;
在这个查询中:
CASE WHEN status = 'shipped' THEN quantity ELSE 0 END
:这部分为每一行订单计算一个新的值。如果订单的状态是 'shipped',则取quantity
的值;否则,取0。SUM(...)
:这部分对CASE WHEN
语句的结果进行求和,从而得到所有已发货产品的总数量。
我们还可以通过在 CASE WHEN
语句中添加多个条件来进一步细化我们的聚合逻辑。例如,如果我们还想计算已取消('cancelled')的产品的总数量,我们可以这样做:
SELECT
SUM(CASE WHEN status = 'shipped' THEN quantity ELSE 0 END) AS total_shipped_quantity,
SUM(CASE WHEN status = 'cancelled' THEN quantity ELSE 0 END) AS total_cancelled_quantity
FROM
orders;
在这个查询中,我们为每种状态('shipped' 和 'cancelled')都添加了一个 SUM(CASE WHEN ...)
表达式,并分别为它们取了别名(total_shipped_quantity
和 total_cancelled_quantity
)。这样,我们就可以在同一查询中同时获取已发货和已取消的产品的总数量了。