Postgresql

Postgresql:按數組列中的值位置排序,然後按二級順序

  • April 9, 2021

我不太確定最好的表達方式是什麼……

所以在我的數據庫中有一個pillars文本數組,它基本上是一個列舉,供應商在其中訂購了對他們的業務最重要的價值,從最重要到為客戶提供價值,再到最不重要。

我正在使用 PostGIS 來查詢特定區域中的提供程序,並希望返回首先按pillar客戶選擇他們正在尋找的位置排序的提供程序,然後按最近的位置。

因此,如果pillars全部都有值['a', 'b', 'c', 'd'],則以任何順序取決於選擇的提供者和客戶選擇的支柱c

查詢的結果最好首先返回c在數組索引處具有柱子的任何/所有提供者,0按到地理點的距離排序,然後由c在數組索引處具有柱子的提供者1第二個按到客戶端地理點的距離排序,然後是 idx 2,然後是 idx3

我真的只在所有情況下都在尋找前 3 個結果,並且只有在 index 的結果少於 3 個時才需要c在 idx具有支柱的提供程序1``0

這可以在單個查詢中完成嗎?或者我應該使用 where 子句執行它並檢查結果長度,直到我有 3 個結果?

pillars列使用 gin 索引 btw 進行索引

這聽起來很簡單:

ORDER BY array_position(pillars, 'c'), st_distance(....)

引用自:https://dba.stackexchange.com/questions/289513