Я пытаюсь получить сумму определенных полей через несколько таблиц, используя соединения. Я неправильно получаю СУММУ, когда пытаюсь собрать значения.
У меня есть состояние таблицы как
| STATE | MONTH | ID | TOTAL |
--------------------------------
| FL | July | 1 | 10000 |
| CA | April | 32 | 2000 |
У меня есть другой стол Баланс как
| STATE | Balance|
-------------------
| FL | 100|
| FL | 200|
| CA | 300|
| CA | 200|
| CA | 100|
У меня есть еще одна таблица Loan как
| STATE | Loan|
-------------------
| FL | 500|
| FL | 600|
| CA | 700|
| CA | 100|
| CA | 200|
В результате моего запроса я хочу получить
| STATE | Loan| Balance|
----------------------------
| FL | 1100| 300|
| CA | 1000| 600|
Когда я пытаюсь использовать следующий запрос, я правильно получаю сумму для кредита с состоянием,
SELECT
S.STATE,
SUM(L.Loan)
FROM State AS S
INNER JOIN Loan AS L ON L.STATE = S.STATE
GROUP BY
S.STATE
Я получаю следующий результат,
| STATE | Loan|
--------------------
| FL | 1100|
| CA | 1000|
Точно так же я могу получить сумму из таблицы баланса.
То, что я пытаюсь достичь, это получить сумму из обеих таблиц, используя одну транзакцию.
Хотя я могу получить нужные значения, если я сделаю что-то подобное,
SELECT
STATE AS STATE
SUM(DataSetB.Balance) AS Balance
FROM
(
SELECT
STATE AS STATE,
B.Balance AS Balance
FROM
(
SELECT
S.STATE AS STATE,
SUM(L.Loan) AS Loan,
FROM State AS S
INNER JOIN Loan AS L ON L.STATE = S.STATE
GROUP BY S.STATE
)
AS DataSetL
INNER JOIN Balance AS B ON B.STATE = DataSetL.STATE
GROUP BY
DataSetL.STATE, B.Balance
) AS DataSetB
GROUP BY
DataSetB.STATE
Однако это не очень возможно для большого набора данных, который у меня есть.
Я пытался,
SELECT
S.STATE AS STATE,
SUM(L.Loan) AS Loan,
SUM(B.Balance) AS Balance
FROM State AS S
INNER JOIN Loan AS L ON L.STATE = S.STATE
INNER JOIN Balance AS B ON B.STATE = S.STATE
GROUP BY
S.STATE
Но это дает мне значения, кратные фактическому значению. Фактически это кратное число строк в дочерних таблицах.
Я не прошу точного решения, но любые указатели были бы хороши.