SQL查询:按员工统计总收入,含无销售员工的0值返回
解决方法:左连接+分组+空值处理
这问题我太懂了!你之前用SUM...GROUP BY只拿到有销售记录的员工收入,是因为默认的内连接会过滤掉没有销售的员工。要得到包含所有员工(哪怕没销售)的统计结果,得这么做:
完整SQL语句
SELECT e.name, COALESCE(SUM(s.price), 0) AS Income FROM Employee e LEFT JOIN Sells s ON e.eID = s.eID GROUP BY e.eID, e.name
关键细节解释
- LEFT JOIN 保留所有员工:用
LEFT JOIN关联Employee和Sells表,这样Employee里的每一条记录(包括Josh这种没销售的)都会被保留,没有对应销售记录的行,Sells表的字段会显示为NULL。 - COALESCE 处理空收入:
SUM(s.price)对于没有销售的员工会返回NULL,COALESCE函数能把这个NULL转换成0,完美实现你要的“无销售员工收入为0”的需求。 - 按eID+name分组:因为存在两个同名但eID不同的Mike,必须同时按
eID和name分组,才能把他们的收入分开统计,不然会把两人的收入合并成29,就不符合你的预期结果了。
运行结果
执行上面的SQL后,会得到你想要的结果:
| name | Income |
|---|---|
| Mike | 15 |
| Mike | 14 |
| Josh | 0 |
内容的提问来源于stack exchange,提问作者Xie Weilun
相关产品推荐
相关产品推荐

