SQL使用CASE WHEN 行转列为什么会出现NULL值?
发布网友
发布时间:2022-04-25 04:55
我来回答
共5个回答
热心网友
时间:2022-04-14 18:21
因为是男女分别统计,一般不这么用
select --avg(总分),
avg(case when 性别='男' then 总分 else 0 END) AS '男生的平均成绩',
avg(case when 性别='女' then 总分 else 0 END) AS '女生的平均成绩'
from students
--GROUP BY 性别--这个group by去掉
你试试
热心网友
时间:2022-04-14 19:39
要注意不能计算男、女的平均成绩时,不能对所有人进行avg:
select avg(总分),
sum(case when 性别='男' then 总分 else 0 end)/count(case when 性别='男' then 1 else 0 end) 男生的平均成绩,
sum(case when 性别='女' then 总分 else 0 end)/count(case when 性别='女' then 1 else 0 end) 女生的平均成绩
from students
热心网友
时间:2022-04-14 21:14
当case 子句的条件未包括所有的取值情况,会出现null值。
例:select case when a >1 then A,when a=1 then b end
那么当 a< 1 时,语句中未指定取值,则返回 null值。
热心网友
时间:2022-04-14 23:05
你这逻辑不对。
select avg(总分) 平均分,
avg(case when 性别='男' then 总分 else 0 END) AS '男生平均成绩',
avg(case when 性别='女' then 总分) else 0 END) AS '女生平均成绩'
from students;
热心网友
时间:2022-04-15 01:13
逻辑有问题。
首先你group by 性别,但是字段中却不取性别,虽然不是一定不行,但是这样有可能产生问题的时候因为你忽略了一个字段导致你发现不了。
其次你group by 性别,应该是想按性别来分组显示,但是你又用了case when判断语句,一般来说case when很少用在分组语句中,即使一定要用,也应该配合聚合语句(如sum,count等),你这个语法应该是无法通过的。
正确的语句楼下有写你可以看他的,但是其实写得更有逻辑性:
select 性别,sum(分数)/count(人名) from students
group by 性别
逻辑简单易懂才不容易出错