如何基于A表ID批量查询B表对应日志总和?SQL查询需求
正确SQL查询:获取每个ID对应的日志总和
现有两张表A和B,表A存储ID,表B存储各ID对应的日志记录,需求是从这两张表中获取每个ID及其对应的日志总和。
表结构及数据
A B ------- ------------- ID ID_C LOG 1 1 15 2 1 30 3 4 44 4 2 14 5 3 88 3 10 2 10
需求说明
表A的ID与表B的ID_C指代同一标识,仅字段名不同。需要得到每个ID对应的日志总和,期望结果如下:
result -------------------- ID SUM 1 45 4 44 2 24 3 98
错误尝试
之前使用的语句返回的是所有ID的日志总和,不符合需求:
SELECT SUM(LOG) FROM B WHERE ID_C in (SELECT ID FROM A ) ;
正确解法
需要用关联查询+分组聚合,将表A和表B通过ID/ID_C关联,然后按ID分组计算总和,有两种常用写法:
写法1:INNER JOIN 分组聚合
仅返回在表B中有对应日志记录的ID(与给出的期望结果一致):
SELECT A.ID, SUM(B.LOG) AS SUM FROM A INNER JOIN B ON A.ID = B.ID_C GROUP BY A.ID;
写法2:LEFT JOIN 保留所有表A的ID
如果需要保留表A中所有ID(包括无日志的ID,此时SUM可通过COALESCE转为0):
SELECT A.ID, COALESCE(SUM(B.LOG), 0) AS SUM FROM A LEFT JOIN B ON A.ID = B.ID_C GROUP BY A.ID;
内容的提问来源于stack exchange,提问作者MMB MMB
相关产品推荐
相关产品推荐

