【发布时间】:2019-02-03 21:36:42
【问题描述】:
我正在尝试使用连接通过多个表获取特定字段的总和。当我尝试将这些值放在一起时,我得到了错误的 SUM。
我有表格状态
| STATE | MONTH | ID | TOTAL |
--------------------------------
| FL | July | 1 | 10000 |
| CA | April | 32 | 2000 |
我有另一个表余额作为
| STATE | Balance|
-------------------
| FL | 100|
| FL | 200|
| CA | 300|
| CA | 200|
| CA | 100|
我还有一张桌子贷款
| 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
但这给我的值是实际值的倍数。它实际上是子表中存在的行数的倍数。
我并不是要一个确切的解决方案,但任何类型的指针都会很好。
【问题讨论】:
标签: sql sql-server join sum inner-join