只需将比较放在order by子句中,使用case语句将它们转换为0/1,然后将它们添加起来:
select *
from table_name query
where column_name like '%something%' or column_name like '%somethingelse%'
order by ((case when column_name like '%something%' then 1 else 0 end) +
(case when column_name like '%somethingelse%' then 1 else 0 end)
. . .
) desc
我倾向于将查询写成:
select (Match1+Match2+. . .) as NumMatches,
from (select t.*,
(case when column_name like '%something%' then 1 else 0 end) as Match1,
. . .
from tablename
) t
order by NumMatches desc