Как я считаю счет более 90 в sql

Я хочу посчитать более 90 баллов, но это заканчивается подсчетом всех строк

select g.score as score
      ,count(case when g.score>=90 then 1 else 0 end) over () as passed
from grades g

Если мои данные

100
45
90 
100

это должно показать 3, но вместо этого это показывает 4

2 ответа

Просто отредактируйте COUNT в SUM, COUNT считает не нулевые значения, поэтому он даже считает 0; SUM будет только "считать" ненулевые значения

Вы либо удалите ELSE часть, поэтому по умолчанию NULL и COUNT не считается NULL

select g.score as score
      ,count(case when g.score>=90 then 1 end) over () as passed
from grades g

или изменить COUNT за SUM

select g.score as score
      ,SUM(case when g.score>=90 then 1 else 0 end) over () as passed
from grades g
Другие вопросы по тегам