You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:38:31