postgre问题与大小写时 SQL.



我有一个名为"候选人"的表格,其中包含score_math"和"score_language"列,反映了候选人在各自测试中的分数。我需要

显示数学和语言 (versatile_candidates) 得分至少为 60 的学生人数,以及两者得分均低于 40 的学生人数 这些测试(poor_candidates)。不要包括具有 NULL preferred_contact 的学生。我的查询是:

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

但这始终会产生具有非空首选联系人类型的候选人总数。无法真正弄清楚我做错了什么,更重要的是为什么这不起作用。[如果这很重要,DBMS 是 Postgres]请帮忙

你很接近 - 你得到所有候选人总数的原因是COUNT()将计算与1相同的0(以及任何其他非NULL值,就此而言)。 由于这些值只能是01,因此您的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

COUNT()不考虑NULL值。所有其他非 NULL 的值都将被计算在内。

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

最新更新