首页 > 解决方案 > PostgreSQL选择出现最多次数的行

问题描述

我有 3 张桌子。1 是包含启动 id 和名称的初创公司,1 是 Investor_groups,包含投资者 ID 和投资者组名称,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 公司,3

冰沙,3

我想要的是——

启动名称,投资者名称

HJ 公司,美国广播公司

HJ公司

HJ公司

冰沙,xyz

冰沙,第一

冰沙,lmn

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

表格中的样本数据 -

对于表“初创公司” 初创公司

对于表“investor_groups” investor_groups

对于表“交易” 交易

标签: sqlpostgresqlmax

解决方案


你可以尝试使用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

推荐阅读