我想获得每个policyid的 top2 limit1的平均值。我需要我的结果表也有objectid。
Limit1和objectid来自表 p_coverage。 Policyid来自表 p_risk。表 p_item 是 p_risk 和 p_coverage 之间的链接表。
我认为我应该构建查询的方式是:在每个policyid中创建一个limit1排名。然后取平均top2。
但是排名不起作用并给出错误的结果。如果我从一个表中获取列,我的查询就可以工作,但是一旦我在它们之间添加连接,它就会给出错误的排名。
SELECT policyid, limit1, /*pcob,*/ RANK() OVER(PARTITION BY policyid ORDER BY limit1 DESC) AS rn
FROM (SELECT policyid, limit1/*, pc.objectid ASpcob*/
FROM p_risk pr
LEFT JOIN p_item
ON pr.objectid=p_item.riskobjectid
LEFT JOIN p_coverage pc
ON p_item.objectid=pc.insuranceitemid) AS s
) AS SubQueryAlias
GROUP BY
policyid, limit1/*, pcob*/, rn
ORDER BY rn,policyid,limit1 DESC
图片末尾的桌子是我想要的。第一张表是Golden Linoff的查询结果