Oracle COUNT函数问题:查询每位员工的订单销售数量
解决员工订单数量统计的关联查询问题
Hey there! 你这个需求其实很常见,用JOIN结合COUNT()函数就能轻松搞定,我给你拆解两种常用的场景:
场景1:只统计有订单记录的员工
如果只需要展示那些处理过订单的员工,用INNER JOIN就足够了:
SELECT e.EmployeeID, COUNT(o.OrderID) AS OrderCount FROM Employees e INNER JOIN Orders o ON e.EmployeeID = o.EmployeeID GROUP BY e.EmployeeID;
INNER JOIN会只返回两张表中员工ID匹配的记录,自动过滤掉没有订单的员工;COUNT(o.OrderID)用来统计每个员工对应的订单总数(指定OrderID而非*,是为了避免误统计NULL值);GROUP BY e.EmployeeID确保我们是按单个员工维度来分组计算订单数。
场景2:统计所有员工(含无订单的)
如果需要展示公司全部员工,哪怕是没有处理过订单的(这类员工的订单数显示0),就要用LEFT JOIN:
SELECT e.EmployeeID, COUNT(o.OrderID) AS OrderCount FROM Employees e LEFT JOIN Orders o ON e.EmployeeID = o.EmployeeID GROUP BY e.EmployeeID;
LEFT JOIN会保留Employees表的所有记录,哪怕Orders表中没有对应员工的订单数据;- 这里依旧用
COUNT(o.OrderID),因为当没有订单时,o.OrderID会是NULL,而COUNT()不会统计NULL值,所以这类员工的订单数会显示为0,完美符合需求。
额外小技巧
- 要是想同时展示员工姓名等信息,直接在
SELECT里添加对应的字段(比如e.LastName, e.FirstName),记得同步加到GROUP BY子句里(不同数据库对分组的要求略有差异,按规范来更稳妥); - 想按订单数从多到少排序的话,在语句末尾加上
ORDER BY OrderCount DESC即可。
内容的提问来源于stack exchange,提问作者Eric Leslie
相关产品推荐
相关产品推荐

