MySQL каждый раз, когда работа только условие, но не если условие - PullRequest
0 голосов
/ 13 ноября 2018

Вот мой запрос

CREATE VIEW marksheet as
SELECT name as name, student_id as student_id, 
roll as roll, class as class,exam_year as exam_year, 
subject_name as subject, exam_type as exam_type,
sum(full_mark) as full_mark, sum(getmark) as getmark,
department as department,
IF(SUM(IF(gpa='f' OR gpa='F',-9999,gpa))>=0, 
CAST(IF(subject_type=1,SUM(gpa)-2/count(subject_name),SUM(gpa)/count(subject_name)) 
AS CHAR), 'F') as total_gpa
FROM mark
GROUP by roll, class, exam_type

Не работает

IF(subject_type=1,SUM(gpa)-2/count(subject_name),SUM(gpa)/count(subject_name))

Каждый раз, когда работают только else Состояние SUM(gpa)/count(subject_name

Не работает subject_type=1,SUM(gpa)-2/count(subject_name)

Мой стол

enter image description here

Результат: gpa = 5 + 8 + 4 + 6

         = 23

Но subject_type = 1 so ,minus -2 (не работает)

         = 21 (Not work)

Окончательный Gpa = 21 / количество (имя_субъекта)

1 Ответ

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

Если может быть только один дополнительный предмет (т. Е. Предмет с subject_type=1) и все другие предметы имеют subject_type=0, вы можете использовать MAX(subject_type), чтобы определить, взял ли студент дополнительный предмет. Этот запрос должен делать то, что вы хотите (обратите внимание, что вам также нужно () вокруг SUM(gpa)-2):

CREATE VIEW marksheet as
SELECT name as name, student_id as student_id, 
roll as roll, class as class,exam_year as exam_year, 
subject_name as subject, exam_type as exam_type,
sum(full_mark) as full_mark, sum(getmark) as getmark,
department as department,
IF(SUM(IF(gpa='f' OR gpa='F',-9999,gpa))>=0, 
CAST(IF(MAX(subject_type)=1,(SUM(gpa)-2)/count(subject_name),SUM(gpa)/count(subject_name)) 
AS CHAR), 'F') as total_gpa
FROM mark
GROUP by roll, class, exam_type

Я создал упрощенную демонстрацию на SQLFiddle .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...