group by 和case when一起时候 ,case when就要加sum或者avg吗
时间: 2023-08-13 09:11:29 浏览: 147
当GROUP BY和CASE WHEN一起使用时,是否需要在CASE WHEN语句中使用聚合函数(如SUM、AVG)取决于具体的需求。如果需要按条件分组后,对每个分组进行聚合操作,那么就需要在CASE WHEN语句中使用聚合函数。例如:
```
SELECT gender,
SUM(CASE WHEN age > 18 THEN 1 ELSE 0 END) AS adult_count,
SUM(CASE WHEN age <= 18 THEN 1 ELSE 0 END) AS child_count
FROM student
GROUP BY gender;
```
这个查询语句中,根据学生的性别进行分组,然后统计每个分组中成年人和未成年人的人数。在这个场景中,需要在CASE WHEN语句中使用SUM函数来对每个分组进行计数。
但是,如果仅仅是需要根据条件返回不同的值,而不需要对分组进行聚合操作,那么就不需要在CASE WHEN语句中使用聚合函数。例如:
```
SELECT name,
CASE WHEN age > 18 THEN '成年人' ELSE '未成年人' END AS age_group
FROM student;
```
这个查询语句中,根据学生的年龄是否大于18岁返回不同的值,不需要在CASE WHEN语句中使用聚合函数。
相关问题
SELECT subject, AVG(score) AS avg_score, CASE WHEN AVG(score) >= 90 THEN '优秀' WHEN AVG(score) >= 80 THEN '良好' WHEN AVG(score) >= 60 THEN '及格' ELSE '不及格' END AS grade FROM scores GROUP BY subject HAVING SUM(CASE WHEN score >= 60 THEN 1 ELSE 0 END) / COUNT(*) >= 0.8;
这是一个 SQL 查询语句,用于计算各科目的平均分和成绩等级,并筛选出及格率达到80%以上的科目。具体来说,它会从成绩表(scores)中选出每个科目(subject),计算该科目的平均分(avg_score),并根据平均分计算出成绩等级(grade)。然后,它会筛选出及格率(即分数大于等于60分的人数占总人数的比例)达到80%以上的科目。
sql case when group by
在SQL语句中,当使用到GROUP BY时,通常只能选择进行GROUP BY的字段以及sum、count、avg、max、min等聚合函数。但是可以使用CASE WHEN进一步对这些聚合函数进行条件约束,作用域仍然是经过GROUP BY后的分组数据。
例如,以下是一个使用CASE WHEN的示例:
SELECT
CASE WHEN condition1 THEN value1
WHEN condition2 THEN value2
ELSE value3
END AS column_name,
COUNT(*) AS count
FROM table
GROUP BY column_name;
另外,也可以通过GROUP BY与CASE WHEN结合使用,根据条件对字段进行拼接。以下是一个示例:
SELECT
date,
SUM(CASE WHEN type = 0 THEN price END) AS type0_price,
SUM(CASE WHEN type = 1 THEN price END) AS type1_price
FROM Price
GROUP BY date;
阅读全文