PostgreSQL选择出现次数最多的行

时间:2018-09-07 20:40:08

标签: sql postgresql max

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

但这给我的结果是-

启动名称,数字

HJ Inc,3

圆滑的人,3

我想要的是-

启动名称,投资者名称

HJ Inc,abc

HJ Inc,def

HJ Inc,ghi

圆滑的人,xyz

圆滑的人,第一个

冰沙,lmn

当我在SELECT语句中添加投资者组名称时,它向我显示了一个错误,即投资者组名称必须位于GROUP BY语句中。

表中的示例数据-

对于表“启动” startups

对于表“ investor_groups” investor_groups

对于表“交易” deals

1 个答案:

答案 0 :(得分: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