PostgreSQL选择出现最多次数的行

问题描述 投票:-1回答:1

我有3张桌子。 1是包含启动ID和名称的初创公司,1是包含投资者ID和投资者组名称的investor_groups,1是包含startup_id的交易 - 提交资金申请的初创公司的ID,以及投资者组_ID的投资者组的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

但这给了我结果 -

startup_name,num

HJ Inc,3

冰沙,3

我想要的是 -

startup_name,investor_name

HJ Inc,abc

HJ Inc,def

HJ Inc,记录

冰沙,xyz

冰沙,rst

冰沙,lmn

当我在SELECT语句中添加Investor组名时,它向我显示一个错误,即Investor组名称需要在GROUP BY语句中。

来自表格的样本数据 -

对于表'初创公司'startups

对于表'investor_groups'investor_groups

对于表'交易'deals

sql postgresql max
1个回答
0
投票

你可以尝试使用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
© www.soinside.com 2019 - 2024. All rights reserved.