avg能用在case when 里面嘛
时间: 2023-10-31 13:58:38 浏览: 271
可以的,AVG函数可以在CASE WHEN语句中使用。CASE WHEN语句用于根据给定的条件选择不同的结果。AVG函数用于计算给定列的平均值。以下是一个示例:
SELECT
CASE WHEN column1 > 10 THEN AVG(column2)
WHEN column1 <= 10 THEN AVG(column3)
END
FROM table_name;
在上述示例中,根据column1的值,选择计算column2或column3的平均值。请注意,CASE WHEN语句中的每个条件后面都需要有一个结果,并且这些结果的数据类型应该一致。
相关问题
SQL中avg在case when连用中失效 如何在case when 中解决
在SQL中,当你试图在一个CASE WHEN子句里同时使用AVG函数和其他条件处理数据,并期望得到平均值的时候,可能会遇到平均值失效的情况。这是因为`AVG`是聚合函数,而`CASE WHEN`是一个条件表达式,它们在语义上并不兼容。
当你需要根据某个条件计算平均值时,通常的做法是分开处理。例如:
```sql
SELECT
CASE
WHEN condition THEN AVG(column_name)
ELSE 0 -- 或者NULL,取决于你对未满足条件值的处理
END AS average_value
FROM table_name
WHERE some_condition;
```
在这个例子中,`condition`是你想要应用条件的地方,如果满足条件,它会返回对应列的平均值;如果不满足,则返回0(或其他预设值)。记得将`condition`, `column_name`, 和 `table_name`替换为你实际的表和列信息。
如果你只想对满足特定条件的数据求平均,而不考虑其他值,那么可以直接在`WHERE`子句之后计算,避免在`CASE WHEN`中使用`AVG`。
SQL中avg在case when连用中失效
在SQL中,`AVG()`函数通常用于计算一列数值型数据的平均值。当你尝试在一个`CASE WHEN`表达式中使用`AVG()`函数时,它可能会失效,因为`AVG()`期望的是可以直接累加的值,而`CASE WHEN`是一个条件判断语句,返回的是单个值或者是NULL。
例如,如果你有这样一个表:
```sql
CREATE TABLE test_table (
score INT,
flag BOOLEAN
);
```
并且你想根据`flag`的真假计算得分的平均分,如果直接这样做:
```sql
SELECT AVG(score) FROM test_table;
```
这会正常工作。但如果你想按旗标状态过滤并计算平均分,如下所示:
```sql
SELECT AVG(
CASE WHEN flag = true THEN score ELSE NULL END
) AS avg_score
FROM test_table;
```
这时`AVG()`将遇到问题,因为它无法处理`NULL`值。在这种情况下,你应该分开处理:
```sql
SELECT AVG(score) AS overall_avg
FROM test_table;
SELECT AVG(score) AS flagged_avg
FROM test_table
WHERE flag = true;
```
第一个查询给出所有记录的平均分,第二个查询只针对`flag = true`的情况。
阅读全文