PostgreSQL 按两列排序,最后可为空
PostgreSQL order by two columns with nullable last
我有 table:
id
date
bonus
1
2022-03-10 16:11:06.445559
6000
2
2022-03-15 16:11:06.445559
4000
3
2022-03-20 16:11:06.445559
null
4
2022-03-25 16:11:06.445559
7000
5
2022-03-30 16:11:06.445559
null
我需要使用 PostgreSQL 语法按日期和奖励列对行进行排序。首先应该是最新的(按日期排序)具有不可为空的奖金的行。然后应该是按日期排序的可空奖金行(也是最新的)
结果应该是下一个:
id
date
bonus
4
2022-03-25 16:11:06.445559
7000
2
2022-03-15 16:11:06.445559
4000
1
2022-03-10 16:11:06.445559
6000
5
2022-03-30 16:11:06.445559
null
3
2022-03-20 16:11:06.445559
null
SELECT *
FROM table
ORDER BY
bonus IS NULL ASC,
date DESC;
bonus IS NULL
是一个布尔值,您可以按它排序。在我看来,它比 CASE
更简洁(至少更短)
你可以用条件for bonus
,优先级高,然后降序排序date
作为较低的优先级,例如
ORDER BY CASE WHEN bonus IS NULL THEN 1 ELSE 0 END, date DESC
我有 table:
id | date | bonus |
---|---|---|
1 | 2022-03-10 16:11:06.445559 | 6000 |
2 | 2022-03-15 16:11:06.445559 | 4000 |
3 | 2022-03-20 16:11:06.445559 | null |
4 | 2022-03-25 16:11:06.445559 | 7000 |
5 | 2022-03-30 16:11:06.445559 | null |
我需要使用 PostgreSQL 语法按日期和奖励列对行进行排序。首先应该是最新的(按日期排序)具有不可为空的奖金的行。然后应该是按日期排序的可空奖金行(也是最新的) 结果应该是下一个:
id | date | bonus |
---|---|---|
4 | 2022-03-25 16:11:06.445559 | 7000 |
2 | 2022-03-15 16:11:06.445559 | 4000 |
1 | 2022-03-10 16:11:06.445559 | 6000 |
5 | 2022-03-30 16:11:06.445559 | null |
3 | 2022-03-20 16:11:06.445559 | null |
SELECT *
FROM table
ORDER BY
bonus IS NULL ASC,
date DESC;
bonus IS NULL
是一个布尔值,您可以按它排序。在我看来,它比 CASE
你可以用条件for bonus
,优先级高,然后降序排序date
作为较低的优先级,例如
ORDER BY CASE WHEN bonus IS NULL THEN 1 ELSE 0 END, date DESC