Как получить точную сумму двух или более строк в postgresql? - PullRequest
0 голосов
/ 08 января 2020

У меня есть одна проблема, и я опишу ее на тривиальном примере.

У меня есть таблица с данными:

Id       DocNumb        Total
1         doc1            5
2         doc2            3
3         doc3           12
4         doc4            4
5         doc5           14
6         doc6           12
7         doc7            4
8         doc8           11
9         doc9            2

Я хочу написать запрос для получения строк с суммой 7 .

Это будет:

Id       DocNumb        Total
1         doc1            5
9         doc9            2
2         doc2            3
4         doc4            4
2         doc2            3
7         doc7            4

1 Ответ

1 голос
/ 08 января 2020

Вы можете получить все пары, используя самостоятельное соединение:

select t1.*, t2.*
from t t1 join
     t t2
     on t1.id < t2.id and  -- no need for duplicates
        t1.total + t2.total = 7;

Это помещает результаты в одну строку - что имеет больше смысла, так что вы знаете, какие пары добавляют до 7 .

РЕДАКТИРОВАТЬ:

Вы можете добавить дополнительные join s, если вы хотите больше строк:

select t1.*, t2.*
from t t1 join
     t t2
     on t1.id < t2.id and  -- no need for duplicates left join
     t t3
     on t2.id < t3.id
 where t1.total + t2.total + coalesce(t3.total, 0) = 7;

Из-за характера ваших данных - наименьшее значение равно «2», и вы хотите, чтобы итоговое значение было «7» - максимальное количество строк равно 3. Таким образом, приведенный выше ответ на вопрос, который вы задали.

Более общий подход будет использовать рекурсивные CTE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...