Многоуровневая иерархическая сортировка 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;
Начать дискуссию