首先按大多数匹配的记录排序

Moa*_*nou 12 sql postgresql

给出以下查询:

select * from users 
where first_name ilike '%foo%' 
OR last_name ilike '%bar%' 
OR nickname ilike '%foobar%'
Run Code Online (Sandbox Code Playgroud)

返回:

 first_name| last_name   |  nickname
----------------------------------------
  Foo      | ABC         |   abcd
  Foo      | DEF         |   efgh
  Foo      | BAR         |   ijkl
  AMD      | Bar         |   foobar
  Foo      | Bar         |   foobar2
Run Code Online (Sandbox Code Playgroud)

题:

如何首先对最相关(匹配)的值进行排序?我的意思是大多数匹配的内部匹配多个模式Where .. OR

预期结果:

 first_name| last_name   |  nickname
----------------------------------------
  Foo      | Bar         |   foobar2
  Foo      | BAR         |   ijkl
  AMD      | Bar         |   foobar
  Foo      | ABC         |   abcd
  Foo      | DEF         |   efgh
Run Code Online (Sandbox Code Playgroud)

Lau*_*lbe 14

按命中数排序:

... ORDER BY (first_name ILIKE '%foo%')::integer 
           + (last_name  ILIKE '%bar%')::integer
           + (nickname   ILIKE '%foobar%')::integer DESC
Run Code Online (Sandbox Code Playgroud)