Как избежать использования вложенных агрегатных функций? - PullRequest
0 голосов
/ 31 мая 2018

Мне нужна помощь здесь, я уверен, что вы, ребята, знаете, как это сделать. Давайте начнем со структуры таблицы:

author(name, nationality, Gender);
article(title, year, conference);
publication(articleTitle, authorName);

Мне нужно знать Пол авторов, у которых наибольшее числопубликации.Кстати, я использую PostgreSQL, не знаю, имеет ли это значение.

Вот моя идея:

select gender from author
join publication on(name = authorName)
having (count(articleTitle) = max(count(articleTitle)))
group by gender

Теперь я знаю, что не могу использовать вложенные агрегатные функции, и поэтомуЯ пытаюсь использовать вложенные выборки, что-то вроде select gender where gender in (another select) Но мне не удалось избежать проблемы с агрегатной функцией.Надеюсь, вы можете помочь мне, спасибо

1 Ответ

0 голосов
/ 31 мая 2018

В этом запросе вы получаете авторов, упорядоченных по количеству публикаций:

select a.name, a.gender, count(*) as num_publications
from author a join
     publication p
     on a.name = p.authorName
group by a.name, a.gender
order by num_publications desc;

Если вам нужны первые три, то используйте fetch first или limit:

select a.name, a.gender, count(*) as num_publications
from author a join
     publication p
     on a.name = p.authorName
group by a.name, a.gender
order by num_publications desc
fetch first 3 rows only;
...