DB2多表关联聚合查询求助:查询指定客户及订单统计数据
DB2 关联查询与聚合统计解决方案
需求说明
需要从cust表筛选指定客户(cust_id=1、2)的基础信息,同时统计对应客户在order表中的订单数量和总金额,确实需要同时使用JOIN(关联两张表)和GROUP BY(按客户分组计算聚合值)。
最终SQL语句
SELECT c.cust_id, c.first_name, c.last_name, COUNT(o.order_id) AS order_count, COALESCE(SUM(o.amount), 0) AS order_total FROM cust c LEFT JOIN "order" o ON c.cust_id = o.cust_id WHERE c.cust_id IN (1, 2) GROUP BY c.cust_id, c.first_name, c.last_name ORDER BY c.cust_id;
语句细节解释
- LEFT JOIN:确保即使指定客户没有订单,也能保留其基础信息(此时订单数量和总金额会显示为0,通过
COALESCE处理)。如果确定目标客户都有订单,也可以用INNER JOIN,但LEFT JOIN兼容性更强。 - WHERE子句:精准筛选cust_id为1和2的客户,避免无关数据参与计算。
- GROUP BY:按客户的唯一标识(cust_id)及姓名字段分组,保证每个客户只返回一条聚合结果。DB2要求SELECT中未使用聚合函数的字段必须出现在GROUP BY中。
- 聚合函数:
COUNT(o.order_id):统计有效订单数量(用order_id而非*,避免统计NULL值)。COALESCE(SUM(o.amount), 0):计算订单总金额,若客户无订单则返回0而非NULL,更符合业务展示需求。
执行结果验证
运行上述语句后,将得到与期望完全一致的输出:
cust_id | first_name | last_name | order_count | order_total -------------------------------------------------------------- 1 | jim | smith | 1 | 12.00 2 | carol | angelo | 3 | 22.00
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

