СУММА по двум другим полям

#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, но на первый взгляд кажется, что оно работает.