Рассмотрим следующее;вложенная модель ...
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id CHAR(1) NOT NULL PRIMARY KEY
,pct INT NOT NULL
,lft INT NOT NULL
,rgt INT NOT NULL
);
INSERT INTO my_table VALUES
('A',20,1,12),
('B',80,2,11),
('C',40,3, 8),
('D',50,9,10),
('E',20,4, 5),
('F',30,6, 7);
SELECT * FROM my_table x JOIN my_table y ON y.lft <= x.lft WHERE x.id = 'E';
+----+-----+-----+-----+----+-----+-----+-----+
| id | pct | lft | rgt | id | pct | lft | rgt |
+----+-----+-----+-----+----+-----+-----+-----+
| E | 20 | 4 | 5 | A | 20 | 1 | 12 |
| E | 20 | 4 | 5 | B | 80 | 2 | 11 |
| E | 20 | 4 | 5 | C | 40 | 3 | 8 |
| E | 20 | 4 | 5 | E | 20 | 4 | 5 |
+----+-----+-----+-----+----+-----+-----+-----+
SELECT x.*, SUM(y.pct) total FROM my_table x JOIN my_table y ON y.lft <= x.lft WHERE x.id = 'E' GROUP BY x.id;
+----+-----+-----+-----+-------+
| id | pct | lft | rgt | total |
+----+-----+-----+-----+-------+
| E | 20 | 4 | 5 | 160 |
+----+-----+-----+-----+-------+
1 row in set (0.00 sec)