PostgreSQL выбирает строки, которые появляются максимальное количество раз - PullRequest
0 голосов
/ 07 сентября 2018

у меня 3 таблицы.1 - стартапы, которые содержат идентификатор и имя запуска, 1 - инвестор_группы, которые содержат идентификатор инвестора и имя группы инвесторов, 1 - сделки, которые содержат startup_id - идентификатор стартапа, который подал заявку на финансирование, и investor_group_id - идентификатор группы инвесторов, котораястартап отправил заявку на финансирование.

Я должен найти стартапы, которые отправили наибольшее количество заявок, и названия групп, к которым они обращались.

То, что я пытаюсь сделать, это -

SELECT S.name AS Startup_name, COUNT(S.name) as num
FROM deals D 
INNER JOIN startups S ON D.startup_id = S.id 
INNER JOIN investor_groups I ON D.investor_group_id = I.id
GROUP BY Startup_name
ORDER BY num DESC
LIMIT 2

Но это дает мне результат как -

имя_запуска, num

HJ Inc, 3

смузи, 3

То, что я хочу, -

имя_запуска, имя_инвестора

HJInc, abc

HJ Inc, def

HJ Inc, ghi

смузи, xyz

смузи, rst

смузи, лмн

Когда я добавляю имена групп инвесторов в операторе SELECT, появляется сообщение об ошибке, что имена групп инвесторов должны быть в операторе GROUP BY.

Пример данных из таблиц -

Для таблицы «стартапы» Стартапы

Для таблицы «Группы инвесторов» Группы инвесторов

Для таблицы «сделки» сделки

1 Ответ

0 голосов
/ 08 сентября 2018

Вы можете попробовать использовать count() over()

SELECT
      S.name AS Startup_name
    , I.name AS investor_name
    , COUNT(*) over(partition by S.name) AS num
FROM deals D 
INNER JOIN startups S ON D.startup_id = S.id 
INNER JOIN investor_groups I ON D.investor_group_id = I.id
ORDER BY num DESC, Startup_name, investor_name
...