Студенты, которые сданы по всем предметам и имеют общий балл более 170 - PullRequest
0 голосов
/ 19 июня 2019

SQL> выбрать * из отметок;

 STUDENTID  SUBJECTID    MARK
---------- ---------- ----------
     1          1         **21**
     1          2         75
     1          3         87
     2          1         82
     2          2         64
     2          3         77
     3          1         82
     3          2         **23**
     3          3         67

9 выбранных строк.

Необходимо подсчитать, кто сдан по всем предметам (> 30 по каждому предмету) и имеет общую оценку> 170 Вот вывод как:

 STUDENTID  Status         Total_MARK

 ---------- ----------      ----------

  2           Passed              223

1 Ответ

4 голосов
/ 19 июня 2019

Вы можете использовать группировку с условным обозначением, как показано ниже

 select student_id, 'Passed' as status, sum(mark) as total_mark 
   from marks
  group by student_id
 having sum(mark)>170 and min(mark)>30;

Демо

Редактировать (из-за вашего последнего комментария): Использование

with marks( student_id, mark ) as
(
 select 1, 21 from dual union all
 select 1, 75 from dual union all
 select 1, 87 from dual union all
 select 2, 82 from dual union all
 select 2, 64 from dual union all
 select 2, 77 from dual union all
 select 3, 82 from dual union all
 select 3, 23 from dual union all
 select 3, 67 from dual
)
 select student_id as "Student ID", 
        case when sum(mark)>170 and min(mark)>30 then 
                  sum(mark)||' (Passed)' 
        else
                  sum(mark)||' (Failed)'         
        end as "Total Mark (Status)"
   from marks
  group by student_id;

Student ID  Total Mark (Status)
----------  -------------------
1           183 (Failed)
2           223 (Passed)
3           172 (Failed)

может быть разумным путем сочетания Total Mark и Status.Если вы действительно хотите разделить эти столбцы, необходимо написать отдельные case when состояний как и аналогичным образом.

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