SQL JOIN与SUM查询问题:获取客户ID、姓名及购买总量
解决JOIN+SUM的SQL查询问题
首先纠正你现有查询的一个错误:Client表中没有first_name字段,对应的是name,这是基础字段匹配问题。
要实现每个客户的ID、姓名及购买总数量,需要结合聚合函数SUM()和分组GROUP BY,以下分两种场景给出解决方案:
场景1:仅展示有下单记录的客户
使用INNER JOIN关联客户和订单表,对每个客户的units_sold求和,同时按客户ID和姓名分组:
SELECT c.client_id, c.name, SUM(o.units_sold) AS total_units_purchased FROM client c INNER JOIN orders o ON o.client_id = c.client_id GROUP BY c.client_id, c.name;
执行结果:
| client_id | name | total_units_purchased |
|---|---|---|
| 3 | Rose | 20 |
| 4 | Laura | 30 |
| 5 | Samuel | 18 |
场景2:展示所有客户(含未下单的客户)
如果需要包含Frank、Emile这类没有下单记录的客户,改用LEFT JOIN,并通过COALESCE()将求和结果的NULL转为0:
SELECT c.client_id, c.name, COALESCE(SUM(o.units_sold), 0) AS total_units_purchased FROM client c LEFT JOIN orders o ON o.client_id = c.client_id GROUP BY c.client_id, c.name;
执行结果:
| client_id | name | total_units_purchased |
|---|---|---|
| 1 | Frank | 0 |
| 2 | Emile | 0 |
| 3 | Rose | 20 |
| 4 | Laura | 30 |
| 5 | Samuel | 18 |
你之前添加SUM后报错的原因
- 字段名错误:误用
first_name代替name,导致字段不存在; - 缺少分组:聚合函数
SUM()需要搭配GROUP BY指定分组维度(客户ID和姓名),否则数据库无法确定按什么维度求和,会出现字段与聚合结果不匹配的错误。
内容的提问来源于stack exchange,提问作者Emilio Parra
相关产品推荐
相关产品推荐

