Mysql 查询求和和减法求和表
Mysql query sum and Subtraction sum tabels
我需要这个查询
Table 基础:
Id name
1 ex1
2 ex2
3 ex3
Table一个
ExtId p
1 10
1 20
2 40
3 10
3 10
TableB
ExtId p
1 10
1 5
3 5
3 5
Table C
ExtId p
1 10
2 10
2 20
3 40
输出:
Table A.p + Table B.p - Table C.p:
id p
1 35
2 10
3 -10
select B1.id, coalesce(Q1.p,0) + coalesce(Q2.p,0) - coalesce(Q3.p,0) as p
from Base B1
left join
(
select ExtId, sum(p) as p
from TableA
group by ExtID
) Q1
on B1.id = Q1.ExtID
left join
(
select ExtId, sum(p) as p
from TableB
group by ExtID
) Q2
on B1.id = Q2.ExtID
left join
(
select ExtId, sum(p) as p
from TableC
group by ExtID
) Q3
on B1.id = Q3.ExtID
尝试对您的 ID 值总和进行分组,然后计算它们:
SELECT
A.id
, A.P + B.p - C.p
FROM
[Table Base] AS T
INNER JOIN
(
SELECT
ExtId
, SUM(p) AS [p]
FROM
[Table A] AS A
GROUP BY
ExtId
) AS A
ON T.id = A.ExtId
INNER JOIN
(
SELECT
ExtId
, SUM(p) AS [p]
FROM
[Table B] AS B
GROUP BY
ExtId
) AS B
ON T.id = B.ExtId
INNER JOIN
(
SELECT
ExtId
, SUM(p) AS [p]
FROM
[Table C] AS C
GROUP BY
ExtId
) AS C
ON T.id = C.ExtId
我的解决方案如下:-
CREATE TABLE Base (Id INT, name NVARCHAR(10))
INSERT INTO Base VALUES (1, 'ex1'), (2, 'ex2'), (3, 'ex3')
CREATE TABLE TableA (ExtId INT, p INT)
CREATE TABLE TableB (ExtId INT, p INT)
CREATE TABLE TableC (ExtId INT, p INT)
INSERT INTO TableA VALUES (1, 10), (1, 20), (2, 40), (3, 10), (3, 10)
INSERT INTO TableB VALUES (1, 10), (1, 5), (3, 5), (3, 5)
INSERT INTO TableC VALUES (1, 10), (2, 10), (2, 20), (3, 40)
SELECT BS.Id, BS.name, ISNULL(A.A_total, 0) + ISNULL(B.B_total, 0) - ISNULL(C.C_total, 0)
FROM Base BS
LEFT JOIN (SELECT ExtId, SUM(p) AS A_total FROM TableA GROUP BY ExtId) A ON BS.Id = A.ExtId
LEFT JOIN (SELECT ExtId, SUM(p) AS B_total FROM TableB GROUP BY ExtId) B ON BS.Id = B.ExtId
LEFT JOIN (SELECT ExtId, SUM(p) AS C_total FROM TableC GROUP BY ExtId) C ON BS.Id = C.ExtId
ORDER BY BS.Id
我需要这个查询
Table 基础:
Id name
1 ex1
2 ex2
3 ex3
Table一个
ExtId p
1 10
1 20
2 40
3 10
3 10
TableB
ExtId p
1 10
1 5
3 5
3 5
Table C
ExtId p
1 10
2 10
2 20
3 40
输出:
Table A.p + Table B.p - Table C.p:
id p
1 35
2 10
3 -10
select B1.id, coalesce(Q1.p,0) + coalesce(Q2.p,0) - coalesce(Q3.p,0) as p
from Base B1
left join
(
select ExtId, sum(p) as p
from TableA
group by ExtID
) Q1
on B1.id = Q1.ExtID
left join
(
select ExtId, sum(p) as p
from TableB
group by ExtID
) Q2
on B1.id = Q2.ExtID
left join
(
select ExtId, sum(p) as p
from TableC
group by ExtID
) Q3
on B1.id = Q3.ExtID
尝试对您的 ID 值总和进行分组,然后计算它们:
SELECT
A.id
, A.P + B.p - C.p
FROM
[Table Base] AS T
INNER JOIN
(
SELECT
ExtId
, SUM(p) AS [p]
FROM
[Table A] AS A
GROUP BY
ExtId
) AS A
ON T.id = A.ExtId
INNER JOIN
(
SELECT
ExtId
, SUM(p) AS [p]
FROM
[Table B] AS B
GROUP BY
ExtId
) AS B
ON T.id = B.ExtId
INNER JOIN
(
SELECT
ExtId
, SUM(p) AS [p]
FROM
[Table C] AS C
GROUP BY
ExtId
) AS C
ON T.id = C.ExtId
我的解决方案如下:-
CREATE TABLE Base (Id INT, name NVARCHAR(10))
INSERT INTO Base VALUES (1, 'ex1'), (2, 'ex2'), (3, 'ex3')
CREATE TABLE TableA (ExtId INT, p INT)
CREATE TABLE TableB (ExtId INT, p INT)
CREATE TABLE TableC (ExtId INT, p INT)
INSERT INTO TableA VALUES (1, 10), (1, 20), (2, 40), (3, 10), (3, 10)
INSERT INTO TableB VALUES (1, 10), (1, 5), (3, 5), (3, 5)
INSERT INTO TableC VALUES (1, 10), (2, 10), (2, 20), (3, 40)
SELECT BS.Id, BS.name, ISNULL(A.A_total, 0) + ISNULL(B.B_total, 0) - ISNULL(C.C_total, 0)
FROM Base BS
LEFT JOIN (SELECT ExtId, SUM(p) AS A_total FROM TableA GROUP BY ExtId) A ON BS.Id = A.ExtId
LEFT JOIN (SELECT ExtId, SUM(p) AS B_total FROM TableB GROUP BY ExtId) B ON BS.Id = B.ExtId
LEFT JOIN (SELECT ExtId, SUM(p) AS C_total FROM TableC GROUP BY ExtId) C ON BS.Id = C.ExtId
ORDER BY BS.Id