SQL中的候选匹配
我的数据库中有下表SQL中的候选匹配,sql,postgresql,Sql,Postgresql,我的数据库中有下表 # 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 ann
# 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 | 4 | 14
(11 rows)
每个人在工作中都按照不同的属性/标准(称为“道具”)进行排名,而表现则被称为“排名”。如示例所示,该表包含(name,prop)的多个值
我想得到满足所有要求的候选人:拥有(prop=1,排名>5)和(prop=3,排名>=8)
示例1
输入:
结果:
示例2
输入:
结果:
示例3
输入:
结果:
示例4
输入:
结果:
如何在SQL中执行此操作?EX1:
SELECT name
FROM matches
WHERE (prop=3 AND rank > 4) OR (prop=4 AND rank > 16)
SELECT name
FROM matches
WHERE (prop=1 AND rank > 6) OR (prop=2 AND rank > 4)
EX2:
SELECT name
FROM matches
WHERE (prop=3 AND rank > 4) OR (prop=4 AND rank > 16)
SELECT name
FROM matches
WHERE (prop=1 AND rank > 6) OR (prop=2 AND rank > 4)
等等……:-)
或者您希望在一个查询中检索所有示例数据(我认为您不希望阅读您的问题)
这应该同时处理一个属性的多行和属性的缺失值。?如果他是一个初学者?这不是那么简单,我想你误解了我的问题。这不是小事,但它是重复的。改进您的第一个问题,而不是发布重复。是的,但是(道具=3且排名>4)或(道具=4且排名>16)将返回Alex Alex Anna 1。重复,2。安娜和亚历克斯都不符合要求
(prop=1 AND rank > 2), (prop=2 AND rank > 2)
name
-----
carl
alex
(prop=3 AND rank > 7)
name
----
carl
alex
anna
SELECT name
FROM matches
WHERE (prop=3 AND rank > 4) OR (prop=4 AND rank > 16)
SELECT name
FROM matches
WHERE (prop=1 AND rank > 6) OR (prop=2 AND rank > 4)
drop table if exists matches;
create table matches (name varchar, prop int, rank int);
insert into matches values
('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' , 4 , 14);
select
name
from
matches
group by
name
having
sum((prop=1 AND rank > 2)::int) > 0 and
sum((prop=2 AND rank > 2)::int) > 0