Сравнение значения базовой таблицы с суммой значений второй таблицы с группировкой по - PullRequest
0 голосов
/ 05 апреля 2019

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

Одна - это базовая таблица, а вторая - таблица транзакций.Я хочу сравнить значение базовой таблицы с суммой значений второй таблицы с помощью группы по.

Table1(T1Id,Amount1,...)

Tabe2(T2Id,T1ID,Amount2)

Я хочу, чтобы эти строки из таблицы 1 ГДЕ СУММА СУММЫ таблицы2 (Amount2) больше или равна сумме таблицы1.

* T1ID связан с обеими таблицами * В запросе SQL есть много объединений с другой таблицей для извлечения данных.

Ответы [ 2 ]

3 голосов
/ 05 апреля 2019

Один подход использует соединение:

SELECT t1.T1Id, t1.Amount1
FROM Table1 t1
INNER JOIN Table2 t2
    ON t1.T1Id = t2.T1ID
GROUP BY
    t1.T1Id, t1.Amount1
HAVING
    SUM(t2.Amount2) >= t1.Amount1;

Мы также можем попробовать сделать это через коррелированный подзапрос:

SELECT t1.T1Id, t1.Amount1
FROM Table1 t1
WHERE t1.Amount1 <= (SELECT SUM(t2.Amount2) FROM Table2 t2
                     WHERE t1.T1Id = t2.T1ID);
0 голосов
/ 05 апреля 2019

Я бы использовал что-то похожее на запрос ниже:

SELECT
    a.T1Id, a.Amount1, SUM(b.Amount2)
FROM Table1 a
INNER JOIN Table2 b on b.T1Id = a.T1Id
GROUP BY a.T1Id, a.Amount1
HAVING SUM(b.Amount2) >= a.Amount1;

По сути, вышеупомянутый запрос дает вам идентификатор, Сумма из таблицы 1 и суммированную сумму из таблицы 2. Предложение HAVING в конце запроса отфильтровывает те записи, в которых сумма суммы из второй таблицы меньше, чем сумма с первого.

Если вы хотите добавить к запросу дополнительные объединения таблиц, вы можете сделать это, добавив столько объединений, сколько пожелаете. Я бы рекомендовал иметь ссылочный идентификатор для каждой таблицы, к которой вы присоединяетесь, в таблице Table1.

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