按条件正确的数量排序

order by with the number of correct condition

我有 16 个 condition.I 想要 order by 在 TRUE 条件下。这意味着具有 16 个 TRUE 条件的记录高于具有 15 个 TRUE 条件的记录。 如果我执行以下操作:

select * from tbluser
order by case 
when field1 like 'abc' AND field2 like 'aaa' AND ... field16 like 'bbb' then 1
when field1 like 'abc' AND field2 like 'aaa' AND ... field15 like 'ccc' then 2
.
.
.
when field2 like 'aaa' then 255
when field1 like 'abc' then 256

如你所见,我应该写256个when,每个都有几个条件

考虑到正确条件的数量很重要,没有其他优先级,有没有更好的解决方案?

你的问题不是很清楚,但听起来你只是想在聚合字段上订购....所以这里有一个简单的例子......

创建table #tmp (f1 int, f2 bit) 插入 #tmp SELECT 1, 1 插入 #tmp SELECT 1, 1 插入 #tmp SELECT 1, 1 插入 #tmp SELECT 2, 1 插入 #tmp SELECT 2, 1 插入 #tmp SELECT 3, 1 插入 #tmp SELECT 4, 1 插入 #tmp SELECT 4, 1

SELECT f1, 计数(f2) 来自#tmp 其中 f2 = 1 -- 真 按 f1 分组 按 2 降序排序,1

您必须决定计数是否相等的规则。

对于 ANSI SQL 解决方案,您可以只分配真谓词 1 和假谓词 0,然后将条件相加,并按降序排列:

ORDER BY 
        CASE WHEN Field1 LIKE 'abc' THEN 1 ELSE 0 END +
        CASE WHEN Field2 LIKE 'aaa' THEN 1 ELSE 0 END +
        ...
        CASE WHEN Field16 LIKE 'bbb' THEN 1 ELSE 0 END DESC;

因为它是 MySQL 你可以稍微走捷径,因为它允许对布尔值进行加法:

ORDER BY (Field1 LIKE 'abc') + (Field2 LIKE 'aaa') ... + (Field16 LIKE 'bbb') DESC;