sql - SQL中的匹配算法

标签 sql postgresql relational-division

我的数据库中有下表。

# 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/

相关文章:

django - 在 PostgreSQL 上为 Django 配置可重复读取或序列化事务隔离

sql - 如何用 SQL 表示关系除法(基本代数表达式)

java - OpenJPA 左外连接条件

javascript - 将SQL数据导入JS数组

sql - 有效日期格式检查 Oracle - 奇怪的行为

ruby-on-rails - 安装pg gem后无法启动rails server

sql - 如何使用 SQL 在可变时间段(每月、每年等)上分配收入?

MySQL如何获取与同一列中另一个组的值匹配的组?

php - MySQL通过另一个表查找行

c# - 将变量值和输出从 PL/SQL 代码块返回到 C#