gpt4 book ai didi

sql - 如何在 PostgreSQL 中进行完全匹配后跟 ORDER BY

转载 作者:行者123 更新时间:2023-11-29 11:54:55 25 4
gpt4 key购买 nike

我正在尝试编写一个查询,将一些结果(在我的例子中是单个结果)放在顶部,然后对其余结果进行排序。我还没有找到 PostgreSQL 解决方案。

假设我有一个名为 airports 的表,就像这样。

 id | code |        display_name         
----+------+----------------------------
1 | SDF | International
2 | INT | International Airport
3 | TES | Test
4 | APP | Airport Place International

简而言之,我在 Controller 方法中有一个查询,当用户文本通过 codedisplay_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 一定是不正确的,但我似乎无法理解任何帮助将不胜感激:)

最佳答案

如果您希望首先返回 code 上的完全匹配项,那么我认为这可以解决问题:

SELECT a.*
FROM airports a
WHERE a.display_name LIKE 'somesearchtext%'
ORDER BY (CASE WHEN a.code = 'somesearchtext' THEN 1 ELSE 2 END),
a.display_name

你也可以这样写:

ORDER BY (a.code = 'somesearchtext') DESC, a.display_name

这不是标准的 SQL,但它非常可读。

关于sql - 如何在 PostgreSQL 中进行完全匹配后跟 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45418407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com