如何使 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
假设我在 '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