MYSQL中有关SUM字段按条件统计使用IF函数(case)问题


在MySQL中,当您需要根据特定条件对某个字段进行求和,并且希望这些条件能够影响求和的结果时,您可以使用`IF`函数或者`CASE`语句。这里我分别给出使用`IF`函数和`CASE`语句的示例。

### 使用`IF`函数

假设您有一个名为`sales`的表,其中包含`amount`(销售额)和`category`(类别)两个字段,您想要统计特定类别(比如'electronics')的销售额总和。


SELECT SUM(IF(category = 'electronics', amount, 0)) AS electronics_sales
FROM sales;

这里,`IF`函数检查每一行的`category`字段是否等于'electronics'。如果是,就使用`amount`字段的值;如果不是,就使用0。然后,`SUM`函数将所有结果相加,得到'electronics'类别的总销售额。

### 使用`CASE`语句

`CASE`语句提供了更灵活的条件逻辑,特别适合有多个条件分支的情况。假设您还想要同时得到'clothes'类别的销售额。


SELECT
  SUM(CASE WHEN category = 'electronics' THEN amount ELSE 0 END) AS electronics_sales,
  SUM(CASE WHEN category = 'clothes' THEN amount ELSE 0 END) AS clothes_sales
FROM sales;

在这个例子中,`CASE`语句为每一行数据检查`category`字段。如果`category`是'electronics',那么对应的`amount`值被加入到`electronics_sales`的总和中;如果`category`是'clothes',那么对应的`amount`值被加入到`clothes_sales`的总和中。对于不符合这些条件的行,使用`ELSE 0`确保它们对总和没有贡献。

这样,您就可以根据特定的条件对MySQL中的字段进行求和了。