SQL 子查询连接和求和

SQL Subquery Join and Sum

我有 Table 1 和 2,两者都有共同的列名 ID。

Table 1 具有重复的行条目,我能够 trim 使用:

SELECT DISTINCT 

Table 2 有重复的 ID 数字条目 (dollarspent),我需要并且能够总结:

Table 1         Table 2 
------------   ------------------
ID     spec    ID       Dol1     Dol2
54      A      54        1         0
54      A      54        2         1
55      B      55        0         2
56      C      55        3         0

-我需要将这两个查询合并为一个查询,以便得到 Table 1 & Table 2 ON 列 ID 的结果 JOIN,(a) Table 中没有重复项1 & (b) 来自 Table 2

的总 $ 值

例如:

NewTable
----------------------------------------
ID     Spec          Dol1           Dol2
54      A             3               1
55      B             3               2

注意:Table 1 和 2 中的行数不同。

谢谢

使用派生的 table 从 table1 获取不同的值,然后简单地连接到 table 2 并使用聚合。

您遇到的问题是 table1 和 table2 之间存在 M:M 关系。您需要它是 1:M 才能使总和准确。因此,我们通过使用 select distinct 从 table1 派生 t1 来为我们提供 1:M 关系中的唯一记录(假设每个 ID 的规格相同)

SELECT T1.ID, T1.Spec, Sum(T2.Dol1) as Dol1, sum(T2.Dol2) as Dol2
FROM (SELECT distinct ID, spec
      FROM table1) T1
INNER JOIN table2 T2
 on t2.ID = T1.ID
GROUP BY T1.ID, T1.Spec

这确实假设您只需要同时存在于两者中的记录。否则我们可能需要使用(LEFT、RIGHT 或 FULL)外连接;取决于期望的结果。

我真的看不到你的数据,但你可能想试试:

SELECT DISTINCT ID
FROM TblOne

UNION ALL

SELECT DISTINCT ID, SUM(Dol)
FROM TblTwo
GROUP BY ID

Pre-aggregate table 2 然后加入:

select t1.id, t1.spec, t2.dol1, t2.dol2
from (select t2.id, sum(dol1) as dol1, sum(dol2) as dol2
      from table2 t2
      group by t2.id
     ) t2 join
     (select distinct t1.id, t1.spec
      from table1 t1
     ) t1
     on t1.id = t2.id;

对于您的数据示例,您不需要 pre-aggregate table 2. 如果 table1 有多个规格,这会给出正确的总和 - 尽管在多行中对于给定的 ID。