如何使 SQL 请求按真实条件的数量排序

How to make a SQL request ordered by amount of true conditions

假设我在 'SELECT' 请求的 'WHERE' 子句中有 10 个条件。

我只需要显示满足至少5个条件的结果,并按满足条件的数量排序:10,9,8...

我该怎么做?

非常感谢:)

这可能会根据您使用的 DBMS 略有不同,但对于 MS-SQL,WHERE 子句可以分割成单独的 CASE 语句,然后对这些语句进行求和和排序:

SELECT
    *,
    CASE WHEN (CONDITION 1) THEN 1 ELSE 0 END
    + CASE WHEN (CONDITION 2) THEN 1 ELSE 0 END
    (...)
    + CASE WHEN (CONDITION 10) THEN 1 ELSE 0 END AS MatchCount
FROM MyTable
ORDER BY MatchCount DESC

然后您可以将其包装为子查询以获得至少匹配 5 个的结果:

SELECT *
FROM (
    SELECT
        *,
        CASE WHEN (CONDITION 1) THEN 1 ELSE 0 END
        + CASE WHEN (CONDITION 2) THEN 1 ELSE 0 END
        (...)
        + CASE WHEN (CONDITION 10) THEN 1 ELSE 0 END AS MatchCount
    FROM MyTable) T
WHERE T.MatchCount >= 5
ORDER BY MatchCount DESC