我想在多个输入上搜索styleID和colorID字段。例如,我想搜索styleID = 3,styleID = 4,colorID = 1,colorID = 5的表,然后将这些结果按boxID分组。按该组内实际匹配数对结果进行排序。

包含一个styleID为4,styleID为3,colorID为1和colorID为5的boxID将首先显示,因为它与所有条件都匹配。

ID boxID styleID colorID关键字
1 1 4 1性感领带
2 1 3 2红色领带
3 1 3 6条纹蓝色
4 2 3 2跳棋
5 2 3 5不是蓝色
6 2 4 6青色是紫色
7 3 4 2花式
8 3 4 5花式
9 3 4 2花式

最佳答案

你可以尝试这样的事情

select boxId, sum(matches)
from (select boxID,
      (case when styleId IN (4) then 1 else 0 end) +
      (case when colorId in (1, 5) then 1 else 0 end) matches
       from test) t1
group by boxId
order by sum(matches) desc;


http://sqlfiddle.com/#!2/b5879/20

08-08 08:38