Я не уверен, что полностью понимаю, что вы подразумеваете под своим вопросом.Не могли бы вы опубликовать ожидаемый результат вместе с тем, что вы получаете сейчас?
В то же время, я предполагаю, что exam_id 678 в Великобритании (с 3 студентами) является лучшим результатом и 987 вВеликобритания - «второй по величине результат» ???
Если это так, Row_number () может работать для вас.Имейте в виду, что row_number обычно является дорогостоящей операцией в реляционных базах данных, поскольку включает перераспределение и сортировку.Подобная функция Rank () может быть лучше для вас, в зависимости от того, как вы хотите обрабатывать связи.Синтаксис аналогичен, вы можете попробовать оба варианта.
Попробуйте изменить свой запрос следующим образом:
выберите количество (отличный T1.student_id) count_user, Страна_имя, имя_экзамена, row_number () более (разделить поorder_name страны (count_user desc) as row_num ...
Если это дает требуемую нумерацию, вы можете затем ограничить вывод с помощью предложения qualify, то есть qualify row_num = 2
Возможно, вам понадобитсяобернуть все это в производную таблицу следующим образом:
select count_user, country_name, exam_name,
row_number () over (partition by country_name order by count_user desc) as row_num
from (
select count(distinct T1.Student_ID) count_user,
t2.Country_name,t2.Exam_name,
from T1 join T2
on T1.Exam_ID = T2.Exam_ID
group by t2.Exam_name, t2.Country_name
) detail_recs
qualify row_num = 2