我有一个包含嵌套数据的简单表,我需要按 id
和 parent_id
对行进行排序
这是实际的表格:
select * from commission_category;
+----+-------+-----------+
| id | code | parent_id |
+----+-------+-----------+
| -1 | " " | null |
| 1 | "AU" | null |
| 7 | "AI" | null |
| 8 | "AEM" | null |
| 9 | "SPE" | null |
| 10 | "AEN" | null |
| 11 | "FV" | null |
| 13 | "PRO" | null |
| 17 | "AF" | 9 |
| 12 | "IND" | 1 |
| 15 | "CIV" | 9 |
| 16 | "CON" | 1 |
+----+-------+-----------+
这是所需的顺序:
+----+-------+-----------+
| id | code | parent_id |
+----+-------+-----------+
| -1 | " " | null |
| 1 | "AU" | null |
| 16 | "CON" | 1 |
| 12 | "IND" | 1 |
| 7 | "AI" | null |
| 8 | "AEM" | null |
| 9 | "SPE" | null |
| 17 | "AF" | 9 |
| 15 | "CIV" | 9 |
| 10 | "AEN" | null |
| 11 | "FV" | null |
| 13 | "PRO" | null |
+----+-------+-----------+
我需要的订单要求先按 id
对表进行排序,然后再按 parent_id
进行排序。 parent_id
需要位于具有相应 id
的行附近。
示例:
第一行的 id = 1
是下一行的 parent_id
。
| 1 | "AU" | null |
| 16 | "CON" | 1 |
| 12 | "IND" | 1 |
这是我制作的:
select * from (select * from commission_category order by id asc) subs order by subs.parent_id desc
+----+-------+-----------+
| id | code | parent_id |
+----+-------+-----------+
| -1 | " " | null |
| 1 | "AU" | null |
| 7 | "AI" | null |
| 8 | "AEM" | null |
| 9 | "SPE" | null |
| 10 | "AEN" | null |
| 11 | "FV" | null |
| 13 | "PRO" | null |
| 17 | "AF" | 9 |
| 15 | "CIV" | 9 |
| 16 | "CON" | 1 |
| 12 | "IND" | 1 |
+----+-------+-----------+
我在查询中缺少什么?
最佳答案
您需要多级排序:
select *
from commission_category
order by coalesce(parent_id, id),
(parent_id is null)::int desc,
id desc
请参阅demo .
结果:
> id | code | parent_id
> -: | :--- | --------:
> -1 | | null
> 1 | AU | null
> 16 | CON | 1
> 12 | IND | 1
> 7 | AI | null
> 8 | AEM | null
> 9 | SPE | null
> 17 | AF | 9
> 15 | CIV | 9
> 10 | AEN | null
> 11 | FV | null
> 13 | PRO | null
关于postgresql - 查询按 id 和parent_id 对行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64061344/