если приправа и группа приправой не работают - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть mark таблица. я храню всю тему здесь. я храню like gpa=3.5 или gpa=F Теперь я хочу сделать marksheet, поэтому мне нужно group by. Я хочу, чтобы один студент получил какой-либо предмет gpa =F, тогда лист результатов показывает только Fail/f

Запрос здесь

CREATE VIEW result as SELECT name as name,roll as roll,class as 
class,subject_name as subject,exam_type as exam_type,sum(full_mark) as 
full_mark,sum(getmark) as getmark, if(gpa =='f', 'F',sum(gpa)) as 
total_gpa FROM mark GROUP by roll,class,exam_type

Таблица

enter image description here

1 Ответ

0 голосов
/ 10 ноября 2018

Проблема, с которой вы столкнулись, заключается в том, что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...