我正在尝试编写一个查询,将一些结果(在我的例子中是单个结果)放在顶部,然后对其余结果进行排序。我还没有找到 PostgreSQL 解决方案。
假设我有一张桌子叫airports
像这样。
id | code | display_name
----+------+----------------------------
1 | SDF | International
2 | INT | International Airport
3 | TES | Test
4 | APP | Airport Place International
简而言之,我在控制器方法中有一个查询,当用户文本搜索机场时,该查询会被异步调用code
or 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
My ORDER BY
一定是不正确的,但我似乎无法理解
任何帮助将不胜感激 :)