我的数据库中有下表。
# 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”的不同属性/标准进行排名,绩效称为“rank”。如示例所示,该表包含 (name, prop) 的多个值。我想根据一些要求获得最佳候选人。例如。我需要一个具有 (prop=1 AND rank > 5)
和 (prop=3 AND rank >= 8)
的候选人。然后我们必须能够根据排名对候选人进行排序,以获得最佳候选人。
编辑:每个人都必须满足所有要求
我如何在 SQL 中执行此操作?
最佳答案
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);
关于sql - SQL中的匹配算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24286141/