Вы можете отфильтровать курсы с осени 2009 г., агрегировать по course_id
и sec_id
, отсортировать результаты по количеству строк в группе и использовать ограничивающее количество строк предложение для получения наиболее внимательного курса:
select course_id, sec_id, count(*) no_registrants
from takes
where semester = 'Fall' and year = '2009'
group by course_id, sec_id
order by no_registrants desc
fetch first 1 rows with ties
Это разрешает верхние связи, если таковые имеются. Если вам нужна только одна строка, вы можете изменить fetch first 1 rows with ties
на fetch first 1 rows only
. Возможно, вы захотите добавить второй критерий сортировки, чтобы результаты были детерминированы c (в противном случае это неопределенный курс, в котором будут отображаться связи).
В Oracle <12 c, где предложение ограничения строки недоступно, вместо него можно использовать <code>rank() (или row_number()
, чтобы запретить связи):
select course_id, sec_id, no_registrants
from (
select
course_id,
sec_id,
count(*) no_registrants,
rank() over(order by count(*) desc) rn
from takes
where semester = 'Fall' and year = '2009'
group by course_id, sec_id
) t
where rn = 1