#sql #sum #recursive-query
Вопрос:
Пояснение : у меня есть такая таблица :
ID | start_pt | end_pt | ценность | дополнение | мой результат |
---|---|---|---|---|---|
1 | 1 | 2 | 0 | 0 | 0 |
2 | 2 | 3 | 1 | 1 | 1 |
3 | 3 | 4 | 0 | 1 | 0 |
4 | 5 | 6 | 1 | 2 | 1 |
5 | 6 | 7 | 0 | 2 | 0 |
Это моя первая рекурсивная функция, и я пытаюсь увеличить значение в соответствии с кортежем n-1, у которого start_pt = end_pt, но мой запрос возвращает неправильные значения (без «добавления» я получаю «значение»). Я почти уверен, что проблемы исходят от группы …с удостоверением личности.
Поля «добавление» — это результат, который я пытаюсь получить.
Пример для id=3, сложение должно возвращать 1, потому что последний кортеж равен 1, а start_pt = end_pt.
Мой запрос выглядит так :
DROP TABLE IF EXISTS turbi.flowAdd_v2;
CREATE TABLE turbi.flowAdd_v2 AS
WITH RECURSIVE additionflow (pk,value,id,start_pt,end_pt)
AS(
SELECT
tu.pk,
0,
tu.id,
tu.start_pt,
tu.end_pt
from turbi."input" tu
LEFT JOIN turbi."input" t2
ON tu.start_pt = t2.end_pt
WHERE t2.end_pt IS NULL
UNION
SELECT
tu.pk,
tu.value,
tu.id,
tu.start_pt,
tu.end_pt
FROM additionflow
JOIN turbi."input" tu
ON additionflow.end_pt =tu.start_pt
)
SELECT SUM(value),id from additionflow GROUP BY value, id; --i think this is the pb
select * from turbi.flowAdd_v2
Комментарии:
1. Ваше объяснение того, чего вы хотите достичь, неясно.
2. Вы должны включить результаты, которые вы действительно хотите получить, в предоставленные вами примеры данных.
3. Извините, это было неясно, но результат соответствует полю «добавление»
Ответ №1:
Если вы пытаетесь создать addition
столбец, это всего лишь совокупная сумма:
select tu.*,
sum(value) over (order by id) as addition
from turbi."input" tu;
Комментарии:
1. я должен изменить свое предложение Where, но на первый взгляд кажется, что оно работает.