Firebird SQL多表关联查询:如何按用户汇总Input1与Input2数值
Firebird SQL关联查询实现客户Input总和统计
没问题,我来帮你搞定这个查询需求!核心思路是先分别计算两个Input表中每个客户的Value总和,再和Customer表关联,避免直接关联多个明细表格导致的笛卡尔积(重复计算)问题。
具体SQL代码
SELECT c.Name, COALESCE(s1.TotalInput1, 0) AS Input1, COALESCE(s2.TotalInput2, 0) AS Input2 FROM Customer c LEFT JOIN ( SELECT Name, SUM(Value) AS TotalInput1 FROM Input1 GROUP BY Name ) s1 ON c.Name = s1.Name LEFT JOIN ( SELECT Name, SUM(Value) AS TotalInput2 FROM Input2 GROUP BY Name ) s2 ON c.Name = s2.Name ORDER BY c.Name;
代码说明
- 两个子查询
s1和s2分别对Input1和Input2按Name分组,计算每个客户的Value总和,先把明细数据聚合为每个客户一行的汇总数据,避免后续关联时出现重复计算。 - 使用
LEFT JOIN关联Customer表,确保即使某个客户在Input表中没有数据(比如新客户还没录入数据),也能在结果中显示;同时用COALESCE把NULL值替换为0,保证结果的完整性。 - 最后按Name排序,让结果展示更清晰。
执行这段SQL后,就能得到你想要的结果:
| Name | Input1 | Input2 |
|---|---|---|
| Angel | 10 | 30 |
| Charlie | 15 | 25 |
内容的提问来源于stack exchange,提问作者Moch Fahmy Ainur Rofiq
相关产品推荐
相关产品推荐

