我有一个名为'candidate'的表,其中包含其他列,score_math'和'score_language'反映了候选人在各自测试中的得分。我需要
显示数学和语言成绩至少为60分的学生人数(多才多艺的考生)以及在这两项考试中成绩均低于40分的学生人数
这些考试(可怜的考生)。不包括没有首选联系人的学生。我的问题是:
select
count(case when score_math>=60 and score_language>=60 then 1 else 0
end) as versatile_candidates,
count(case when score_math<40 and score_language<40 then 1 else 0 end) as
poor_candidates
from candidate
where preferred_contact is not null
但这始终会产生具有非空首选联系人类型的候选总数。无法真正弄清楚我做错了什么,更重要的是为什么这不起作用。[数据库管理系统是Postgres如果这很重要]请帮助
最佳答案
你已经接近了-你得到所有候选人总数的原因是因为COUNT()
将a0
计算为与a1
相同的值(以及任何其他非NULL
值)。由于值只能是0
或1
,因此您的COUNT()
将返回所有候选项的总数。
因为您已经默认了与0
不匹配的案例,所以您只需将COUNT()
更改为SUM()
:
Select Sum(Case When score_math >= 60
And score_language >= 60 Then 1
Else 0
End) As versatile_candidates
, Sum(Case When score_math < 40
And score_language < 40 Then 1
Else 0
End) As poor_candidates
From candidate
Where preferred_contact Is Not Null
关于sql - SQL情况下的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41513343/