Ваша непосредственная проблема в том, что course_level
находится в group by
.Вторичная проблема заключается в том, что count()
неверно.Я думаю, этого должно быть достаточно:
select ID,
count(*) as tot_course_id,
sum(case when course_level = 'G' then 1 else 0 end) as count_grad,
sum(case when course_level = 'U' then 1 else 0 end) as count_under
from ods.STUDENT_COURSE sc
where ACADEMIC_PERIOD = '201890' and
COURSE_BILLING_CREDITS > 0.0
group by ID
order by 1;
count(<expression>)
считает количество не NULL
значений.Ваш else '0'
все еще не равен нулю, поэтому он засчитывается.sum()
- это простой способ позаботиться об этом.
В этой версии предполагается, что COURSE_IDENTIFICATION
не NULL
.Это кажется разумным предположением в таблице под названием STUDENT_COURSE
.Он легко модифицируется для обработки NULL
значений.
И, select distinct
почти никогда не подходит для group by
.