一尘不染

SQL中的匹配算法

sql

我的数据库中有下表。

# select * FROM matches;
 name | prop |  rank
------+------+-------
 carl |    1 |     4
 carl |    2 |     3
 carl |    3 |     9
 alex |    1 |     8
 alex |    2 |     5
 alex |    3 |     6
 alex |    3 |     8
 alex |    2 |    11
 anna |    3 |     8
 anna |    3 |    13
 anna |    2 |    14
(11 rows)

每个人在工作中均按不同的属性/标准(称为“
prop”)进行排名,而绩效则称为“等级”。如示例所示,该表包含(name,prop)的多个值。我想从某些要求中获得最佳人选。例如,我需要具有(prop=1 AND rank > 5)和的候选人(prop=3 AND rank >= 8)。然后,我们必须能够按候选人的排名对他们进行排序,以获得最佳候选人。

编辑:每个人都必须满足所有要求

如何在SQL中执行此操作?


阅读 170

收藏
2021-03-10

共1个答案

一尘不染

select x.name, max(x.rank) 
from matches x
join (
    select name from matches where prop = 1 AND rank > 5
    intersect
    select name from matches where prop = 3 AND rank >= 8
) y
    on x.name = y.name 
group by x.name
order by max(rank);
2021-03-10