MySQL写个case when的SQL
时间: 2024-07-17 07:00:57 浏览: 123
MySQL中的`CASE WHEN`语句是一个条件表达式,用于根据给定的条件执行不同的操作并返回结果。它的基本语法结构如下:
```sql
SELECT
CASE
WHEN condition_1 THEN result_1
[WHEN condition_2 THEN result_2]
[...]
ELSE default_result
END
FROM table_name;
```
这里,`condition_i`是你想要检查的每个条件,如果该条件为真(非NULL),对应的`result_i`就会被选择并返回。如果所有`WHEN`都不满足,则会执行`ELSE`部分定义的结果,如果没有`ELSE`,当没有匹配条件时,通常返回NULL。
例如,如果你想计算学生的成绩等级,你可以这样做:
```sql
SELECT
id,
case
when grade > 90 then 'A'
when grade BETWEEN 80 AND 90 then 'B'
when grade BETWEEN 70 AND 80 then 'C'
when grade BETWEEN 60 AND 70 then 'D'
else 'F'
end as letter_grade
FROM students;
```
这将根据学生成绩分配字母等级。
相关问题
mysql sql的case when 写法
MySQL SQL中的CASE WHEN语句是一种条件表达式,它可以根据条件返回不同的值。CASE WHEN语句有两种写法,一种是当字段值为枚举类型时,另一种是当字段值不是枚举类型时,而是根据一定的条件进行处理。下面分别介绍这两种写法:
1. 当字段值为枚举类型时,CASE WHEN语句的写法如下:
CASE 字段名
WHEN 枚举值1 THEN 返回值1
WHEN 枚举值2 THEN 返回值2
...
ELSE 返回值n
END
例如,当我们有一个性别字段sex,其中0表示男性,1表示女性,2表示未知,我们可以使用以下语句将其转换为中文:
SELECT CASE sex
WHEN 0 THEN '男'
WHEN 1 THEN '女'
ELSE '未知'
END AS '性别'
FROM user;
2. 当字段值不是枚举类型时,而是根据一定的条件进行处理时,CASE WHEN语句的写法如下:
CASE
WHEN 条件1 THEN 返回值1
WHEN 条件2 THEN 返回值2
...
ELSE 返回值n
END
例如,当我们有一个学生成绩表score_info,其中score字段表示学生成绩,我们可以使用以下语句将其转换为成绩等级:
SELECT student_name, score,
CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 80 THEN '良好'
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS '成绩等级'
FROM score_info;
mysql sql case when
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语句来过滤掉不属于特定产品的销售额。最后,我们将结果按客户分组,以显示每个客户的最高销售额是哪个产品。
阅读全文