Многоуровневая иерархическая сортировка PostgreSQL
Пример запроса с правильной иерархической сортировкой.
Дано: таблица test с полями: id, parent_id, name, sort. Поле sort содержит числовое значение, определяющее сортировку строк первого порядка в пределах уровня иерархии, второй порядок сортировки определяется полем name.
Запрос, реализующий многоуровневую (sort asc, name asc) иерархическую сортировку будет таким ...
WITH RECURSIVE
list as (
SELECT *, row_number() OVER (ORDER BY sort, name) FROM test
),
tree as (
SELECT list.*, array[list.row_number] as order_array
FROM list
WHERE list.parent_id is null
UNION ALL
SELECT list.*, tree.order_array || list.row_number
FROM list JOIN tree ON list.parent_id = tree.id
)
SELECT * FROM tree ORDER BY order_array;
Начать дискуссию