Проблема, с которой вы столкнулись, заключается в том, что IF
применяется после SUM
, а SUM
просто обрабатывает значения gpa, которые являются строками (например, 'f'
), как 0, что означает, что SUM
всегда числовой (и никогда не равняется 'f'
). Что вам нужно сделать, это проверить значение gpa, как вы SUM
, а затем использовать специальное значение в этом случае (например, -9999), чтобы получить результат, например. <0, то вы можете проверить сумму <0 и использовать ее в качестве условия для получения результата 'F', например </p>
IF(SUM(IF(gpa='f' OR gpa='F',-9999,gpa)) >= 0,
CAST(SUM(gpa) AS CHAR), 'F') AS total_gpa
Обратите внимание, что поскольку одним из выводов IF
является текст, мы должны также преобразовать SUM
в текст, чтобы получить правильный результат.
Я создал небольшую демонстрацию по SQLFiddle :
create table grades (id int, gpa varchar(20));
insert into grades values (1, 4), (1, 5), (2, 3), (2, 'f');
select IF(SUM(IF(gpa='f' OR gpa='F',-9999,gpa)) >= 0,
CAST(SUM(gpa) AS CHAR), 'F') AS total_gpa
from grades
group by id
Выход:
total_gpa
9
F