我在制定以下问题的查询时遇到了麻烦:
对于具有特定分数的成对值,如何以一种方式对它们进行分组,以便仅返回具有最佳各自得分的不同成对值?
例如,假设我有一个包含以下行值的表:
(t1,p1,65)
(t1,p2,60)
(t1,p3,20)
(t2,p1,60)
(t2,p2,59)
(t2,p3,15)
前两列显示配对值,第三列表示配对分数。最佳分数为(t1,p1,65)
。由于t1和p1现在已经被使用了,我希望将它们排除在进一步的分析之外。
接下来最好的分数是(t2,p2,59)
。尽管(t1,p2)
的得分为60,但由于“t1”已经被使用,我要将其排除。(t2,p1)
的得分也为60,但由于p1也已被使用,因此排除了这对。
这导致了不同配对分数值的出现:
(t1,p1,65)
(t2,p2,59)
有没有办法只用一个查询生成这个结果?我尝试过对结果进行分组和分区的方法,但由于必须根据分数排名计算已使用的值,所以我发现这非常难以处理。
编辑:
生成数据的方法:
with t(t, p, score) as (
(values ('t1','p1',65),
('t1','p2',60),
('t1','p3',20),
('t2','p1',60),
('t2','p2',59),
('t2','p3',15)
))
select t.* from t;
p1
,为什么结果中有(t2, p1, 60)
? - borowis