SQL时出现的case问题

SQL时出现的case问题,sql,postgresql,case,Sql,Postgresql,Case,我有一个名为“候选者”的表格,其中包括“数学分数”和“语言分数”,反映了候选者在各自测试中的分数。我需要 显示数学和语言成绩至少为60分的学生人数(多才多艺的大学考生)以及数学和语言成绩均低于40分的学生人数 这些测试(糟糕的候选者)。不包括首选联系人为空的学生。我的问题是: select count(case when score_math>=60 and score_language>=60 then 1 else 0 end) as versatile_candidates,

我有一个名为“候选者”的表格,其中包括“数学分数”和“语言分数”,反映了候选者在各自测试中的分数。我需要

显示数学和语言成绩至少为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
选择
计数(当数学分数>=60,语言分数>=60时,则为1,否则为0
(完)作为多才多艺的大学候选人,
计数(当分数\u math
count()
不考虑
NULL
值时的情况。将对所有其他非NULL值进行计数

您可能希望将其替换为
SUM()
COUNT()
不考虑
NULL
值。所有其他非NULL值都将被计算


您可能希望将其替换为
SUM()

您很接近-您获得所有候选对象总数的原因是
COUNT()
0
1
相同(以及任何其他非
NULL
值)。由于值只能是
0
1
,因此
COUNT()
将返回所有候选对象的总数

由于您已经默认了与
0
不匹配的案例,因此只需将
COUNT()
更改为
SUM()

选择总和(数学分数>=60时的情况)
语言得分>=60,则为1
其他0
(完)作为多才多艺的大学候选人,
,求和(数学分数<40时的情况)
语言得分<40分,则为1分
其他0
(完)作为差劲的候选人
来自候选人
其中首选_联系人不为空

你很接近-你得到所有候选人总数的原因是
COUNT()
0
计数为
1
(以及任何其他非
NULL
值),因为这些值只能是
0
1
,所以你的
计数()
将返回所有候选人的总数

由于您已经默认了与
0
不匹配的案例,因此只需将
COUNT()
更改为
SUM()

选择总和(数学分数>=60时的情况)
语言得分>=60,则为1
其他0
(完)作为多才多艺的大学候选人,
,求和(数学分数<40时的情况)
语言得分<40分,则为1分
其他0
(完)作为差劲的候选人
来自候选人
其中首选_联系人不为空

使用
SUM()
不使用
COUNT()
或不使用
其他0
使用
SUM()
不使用
COUNT()
或不使用
else 0
对。应该使用SUM()而不是COUNT()。非常感谢,对两个答案进行投票!对。应该使用SUM()而不是COUNT()。非常感谢,对两个答案进行投票!
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