首页 > 解决方案 > 如何根据 sql 中的匹配数针对关键字数组搜索字符串并排序结果?

问题描述

我在这里看到了类似的答案:

按大多数匹配选择和排序

并想知道如何适应它。实际上很震惊下面的订单声明有效。但想知道如何调整它以用于一系列关键字。

数组['快乐','生日'.. x 更多关键字]

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

标签: sqlpostgresql

解决方案


一种方法是在子查询中使用unnest()和:count(*)

select v.*,
       (select count(*)
        from  unnest(array['this', '2', 'is']) pat
        where str like '%' || pat || '%'
       ) cnt
from (values ('this is a test'), ('test 2 x')) v(str) 
order by cnt desc

推荐阅读