SQLite 最大匹配行与值的多列
SQLite Maximum matching row by multi column with value
测试table
ID a b c d e (f to z)
--------------------------------
0 2 7 9 0 8 ...
1 4 5 6 3 0 ...
2 1 5 6 2 9 ...
3 1 0 8 2 3 ...
4 2 1 6 9 5 ...
5 1 5 6 2 3 ...
6 2 3 4 1 0 ...
我想找到与我的查询匹配最多列的行。我现在拥有的是
select ID from test where a = 1, b = 5, c = 6, d = 2, e = 3, ... (same with f to z)
上面示例的期望输出是:5, 2, 3, 1, 4
如何编写这样的查询?
要在多个列中找到最接近的匹配项,最简单的方法可能是计算列匹配项的数量并按其降序排列。
SELECT ID
FROM myTable
ORDER BY
CASE WHEN a = 1 THEN 1 ELSE 0 END +
CASE WHEN b = 5 THEN 1 ELSE 0 END +
CASE WHEN c = 6 THEN 1 ELSE 0 END +
CASE WHEN d = 2 THEN 1 ELSE 0 END +
CASE WHEN e = 3 THEN 1 ELSE 0 END DESC;
# ID: 5 2 3 1 4 0 6
测试table
ID a b c d e (f to z)
--------------------------------
0 2 7 9 0 8 ...
1 4 5 6 3 0 ...
2 1 5 6 2 9 ...
3 1 0 8 2 3 ...
4 2 1 6 9 5 ...
5 1 5 6 2 3 ...
6 2 3 4 1 0 ...
我想找到与我的查询匹配最多列的行。我现在拥有的是
select ID from test where a = 1, b = 5, c = 6, d = 2, e = 3, ... (same with f to z)
上面示例的期望输出是:5, 2, 3, 1, 4
如何编写这样的查询?
要在多个列中找到最接近的匹配项,最简单的方法可能是计算列匹配项的数量并按其降序排列。
SELECT ID
FROM myTable
ORDER BY
CASE WHEN a = 1 THEN 1 ELSE 0 END +
CASE WHEN b = 5 THEN 1 ELSE 0 END +
CASE WHEN c = 6 THEN 1 ELSE 0 END +
CASE WHEN d = 2 THEN 1 ELSE 0 END +
CASE WHEN e = 3 THEN 1 ELSE 0 END DESC;
# ID: 5 2 3 1 4 0 6