我试图编写一个查询,在顶部放置一些结果(在我的情况下为单个结果),然后对其余的结果进行排序。我还没有找到PostgreSQL解决方案。如何在PostgreSQL中执行完全匹配,然后是ORDER BY
说我有一个叫做airports
的表。
id | code | display_name
----+------+----------------------------
1 | SDF | International
2 | INT | International Airport
3 | TES | Test
4 | APP | Airport Place International
总之,我有一个控制器方法的查询被异步调用时机场用户文本搜索或者通过code
或display_name
。但是,当用户输入与code
准确匹配的输入(机场代码是唯一的)时,我希望首先显示该结果,并且之后将按升序显示int
(display_name
)中的所有机场。如果没有完全匹配,则应返回按display_name
排序的任何通配符匹配。因此,如果用户键入INT
,该行(2, INT, International Airport)
应先返回,随后其他人:
Results:
1. INT | International Airport
2. APP | Airport Place International
3. SDF | International
这是我与那个摆弄略有简化,使我的应用程序的环境之外意义上的查询类型,但尽管如此,同样的概念。
SELECT * FROM airports
WHERE display_name LIKE 'somesearchtext%'
ORDER BY (CASE WHEN a.code = 'somesearchtext` THEN a.code ELSE a.display_name END)
眼下的结果,如果我输入INT
我得到
Results:
1. APP | Airport Place International
2. INT | International Airport
3. SDF | International
我ORDER BY
必须是不正确的,但我似乎无法得到它 任何帮助将不胜感激:)
注意你并不需要如此。由于“=”在FALSE之后返回一个布尔值和TRUE排序,所以可以执行“ORDER BY a.code ='yourvalue'DESC,a.display_name” – peufeu