带groupby的SQL连接查询
我有两个表,T1和T2,其中一个(T1)存储要支付的金额(AP)、主键Id和个人Id(pid) 其他表(T2)存储已支付的金额(Pay),这可以是多个,因为可以为AP进行多次支付,还存储T1 ID和类型的外键 现在我想要的是t1中的SUM(AP)和SUM(Pay)groupby类型 我对它的查询(不是确切的查询,但很好地解释了我在尝试什么) 解释带groupby的SQL连接查询,sql,Sql,我有两个表,T1和T2,其中一个(T1)存储要支付的金额(AP)、主键Id和个人Id(pid) 其他表(T2)存储已支付的金额(Pay),这可以是多个,因为可以为AP进行多次支付,还存储T1 ID和类型的外键 现在我想要的是t1中的SUM(AP)和SUM(Pay)groupby类型 我对它的查询(不是确切的查询,但很好地解释了我在尝试什么) 解释 T1 T2 ID AP ID Pay Type 19 X 19
T1 T2
ID AP ID Pay Type
19 X 19 W A
20 Y 19 Q B
21 Z 21 R B
21 S B
现在发生了什么,当它按类型分组时,它把19,21,21作为B,加在一起,它给我T1的和是Z+X的两倍,同样对于A,它把A和返回的和作为X
我接收格式的数据
1. AP:X, Pay:W, Type: A
2. AP: X+Z+Z, Pay:Q+R+S,Type B
我需要的是T1的和和T2的和(基于T1的id)按类型分组
我用两个不同的查询解决了这个问题,每个查询一个,但无法在单个查询中完成,这可能很复杂,我知道,但如果可能的话,我希望这样做
希望我能把问题说清楚。这就是你们想要的吗
select
vt1.id,
vt1.ap,
sum(t2.pay),
t2.type
from (select id, sum(ap) as ap from t1 group by id) vt1
left join t2 on vt1.id=t2.id
group by vt1.id, vt1.ap, t2.type
如果按类型分组,您将不可避免地得到ID=19 AP=x重复金额。一个解决方案可能是在不同的类型中划分x(百分比?第一种类型得到整个数量?)T1,否。Id是它的主键。我对您想要的结果有点困惑。请您也添加一个您想要的输出示例?@Dems我想要T1中的数据总和和T2中的数据总和按类型分组,在单个查询中,您不能,因为您有两种类型用于单个T1。因此,T1中的一行将被列出两次(如果有更多类型,则列出更多次)。如果您的报告不尝试求和(AP),则这不是问题。如果是这样的话,你将不得不想出一种方法,将AP的价值分成不同的类型。您可能会在第一行中显示值,并在下一行中使用相同的T1.ID将其设为空,或者您可能会根据t2中的值排列值,在这种情况下,您可能会遇到数字舍入问题。这是它在上述查询中返回的结果:(格式化问题,添加了行号)row
ID ap sum(t2.pay)键入1.19 0 0 A 2.19 0 0 B 3.20 0 NULL 4.21 0 0 B
它不是按分组,对吗?这里我有3个B项
select
vt1.id,
vt1.ap,
sum(t2.pay),
t2.type
from (select id, sum(ap) as ap from t1 group by id) vt1
left join t2 on vt1.id=t2.id
group by vt1.id, vt1.ap, t2.type