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