最後のクエリでは、実際には2つのソートが1つになっています。親は昇順または降順で並べ替えることができますが、子は昇順でしか並べ替えることができません。
これを見た後、私はあなたがこのようなもので解決策を得ることができると信じています。
order by case
when depth = 0
then path
/*
secret function that always returns the
right numbers regardless of whether or not the sort is ascending.
*/
else XXX_function('DESC', path)
end desc;
論理は正しいと思いますが、物事が「逆さま」になるため、降順で数字を置き換える方法を理解する必要があります。 (配列の位置を逆にするかもしれません)