有没有办法查询表中符合所有条件或其子集的行,定义该子集的最小大小?
例如:
SELECT * FROM table WHERE <condition 1> AND <condition 2> AND ... AND <condition 9>
鉴于9个条件,我能找到至少匹配其中6个的所有行吗?另外 - 我可以知道每行匹配的条件有多少?
答案 0 :(得分:3)
也许是这样的:
select *
from (
select
t.*,
case when <condition1> then 1 else 0 end
+ case when <condition2> then 1 else 0 end
. . .
+ case when <conditionN> then 1 else 0 end as match_count
from your_table t
) where match_count >= 6;
上述解决方案是标准解决方案,适用于大多数数据库。
在Postgres中,由于条件的输出是布尔值,并且使用<condition>::int
将布尔值casted转换为int(true - 1和false - 0),因此可以将相同的解决方案重写为:
select *
from (
select
t.*,
<condition1>::int
+ <condition2>::int
+ ...
+ <conditionN>::int as match_count
from your_table t
) where match_count >= 6;
答案 1 :(得分:1)
Gurv有正确的方法。但是,它可以简化&#34;对于Postgres。这是一种方法:
SELECT *
FROM table
WHERE ((<condition 1>):int +
(<condition 2>)::int +
. . .
) >= 6 -- or whatever