Postgresql

Postgres 按多列排序

  • July 1, 2022

所以想像我有一個看起來像這樣的結果集:

+----+------------+------------+
| Id |  Date_One  |  Date_Two  |
+----+------------+------------+
|  1 | 2022-05-12 | null       |
|  2 | 2022-05-13 | 2022-05-11 |
|  3 | null       | 2022-05-14 |
+----+------------+------------+

我想先根據最早日期排序結果,而不考慮列。每行將有一個Date_OneDate_Two填充。它們永遠都不會為空。

所以上述結果集的結果將是:

+----+------------+------------+
| Id |  Date_One  |  Date_Two  |
+----+------------+------------+
|  2 | 2022-05-13 | 2022-05-11 |
|  1 | 2022-05-12 | null       |
|  3 | null       | 2022-05-14 |
+----+------------+------------+

(因為 Id 2Date_Two早於 Id 1 的Date_One)。

我不確定如何創建我的ORDER BY子句。我幼稚的解決方案是使用COALESCE,但在我的範例中這不適用於 ID 2。

只需使用order by least(date_one, date_two)

least函式返回兩個值中的最小值,巧合的是,您可以使用它greatest(date_one, date_two)來獲取最大值。這也適用於null,但是如果兩個值null顯然都是這些函式中的任何一個,null因為沒有什麼可比較的,所以這些函式中的任何一個都將返回。

請記住,使用leastorgreatest也會使您為訂購這 2 列而創建的任何索引不可用,除非您使用least/greatest. 儘管我不確定在您的情況下這是最好的舉措。

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