查找与PostgreSQL中的条件部分匹配的行

时间:2017-03-21 14:54:48

标签: sql postgresql

有没有办法查询表中符合所有条件或其子集的行,定义该子集的最小大小?

例如:

SELECT * FROM table WHERE <condition 1> AND <condition 2> AND ... AND <condition 9>

鉴于9个条件,我能找到至少匹配其中6个的所有行吗?另外 - 我可以知道每行匹配的条件有多少?

2 个答案:

答案 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