mysql sql case when
时间: 2023-10-14 21:25:32 浏览: 218
MySQL中的CASE语句类似于其他SQL实现中的CASE语句,它允许您根据一组条件执行不同的操作。
语法如下:
```
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
WHEN conditionN THEN resultN
ELSE result
END
```
其中,`condition1`、`condition2`、...、`conditionN`是要测试的条件,`result1`、`result2`、...、`resultN`是相应的结果。ELSE子句是可选的,它指定在任何条件都不匹配时要返回的默认结果。
例如,假设您有一个名为`sales`的表,其中包含以下列:`id`、`customer`、`product`和`amount`。您可以使用CASE语句来计算每个客户在每个产品上的总销售额:
```
SELECT customer, product, SUM(amount) AS total_sales
FROM sales
GROUP BY customer, product
ORDER BY customer, product;
+----------+---------+-------------+
| customer | product | total_sales |
+----------+---------+-------------+
| Alice | Apple | 1200 |
| Alice | Orange | 800 |
| Bob | Apple | 500 |
| Bob | Orange | 900 |
| Charlie | Apple | 300 |
| Charlie | Orange | 400 |
+----------+---------+-------------+
```
现在假设您想在结果中添加一列,该列显示每个客户的最高销售额是哪个产品。您可以使用以下代码:
```
SELECT customer,
MAX(CASE WHEN product = 'Apple' THEN total_sales ELSE NULL END) AS apple_sales,
MAX(CASE WHEN product = 'Orange' THEN total_sales ELSE NULL END) AS orange_sales
FROM (
SELECT customer, product, SUM(amount) AS total_sales
FROM sales
GROUP BY customer, product
) AS sales_totals
GROUP BY customer;
+----------+-------------+--------------+
| customer | apple_sales | orange_sales |
+----------+-------------+--------------+
| Alice | 1200 | 800 |
| Bob | 500 | 900 |
| Charlie | 300 | 400 |
+----------+-------------+--------------+
```
在这个示例中,我们使用了两个嵌套的SELECT语句。第一个SELECT语句计算每个客户在每个产品上的总销售额,第二个SELECT语句使用CASE语句将每个客户的销售额转换为两列:`apple_sales`和`orange_sales`。在第二个SELECT中,我们使用MAX函数来找到每个客户的最高销售额,并且使用了ELSE NULL语句来过滤掉不属于特定产品的销售额。最后,我们将结果按客户分组,以显示每个客户的最高销售额是哪个产品。
阅读全文