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

SQL技术问询:如何找出2012年业绩最佳的员工

解决2012年业绩最佳员工的SQL查询方案

核心思路

要解决这个问题,需要完成三个关键步骤:正确关联三张表、过滤2012年的交易数据、计算员工销售总额并找出最大值。

基础查询(单一名次员工)

以下是最直接的SQL语句,适用于只需要获取第一名员工的场景:

SELECT 
    e.FirstName || ' ' || e.LastName AS EmployeeName,
    SUM(i.Total) AS TotalSales2012
FROM Employee e
JOIN Customer c ON e.EmployeeID = c.SupportRepID
JOIN Invoice i ON c.CustomerID = i.CustomerID
-- 过滤2012年的发票,两种方式选其一
WHERE YEAR(i.InvoiceDate) = 2012
-- 或者用日期范围(性能更优,适合有索引的情况)
-- WHERE i.InvoiceDate BETWEEN '2012-01-01' AND '2012-12-31 23:59:59'
GROUP BY e.EmployeeID, e.FirstName, e.LastName
ORDER BY TotalSales2012 DESC
LIMIT 1;

关键部分解释

  • 表关联:使用JOIN(即INNER JOIN)连接三张表,确保只统计有客户关联且产生过发票的员工,避免无业绩的员工被纳入。关联条件严格按照你提供的逻辑:Employee.EmployeeID = Customer.SupportRepID、Customer.CustomerID = Invoice.CustomerID。
  • 时间过滤:
    • YEAR(i.InvoiceDate) = 2012:直接提取发票日期的年份进行过滤,写法简单。
    • 日期范围写法:i.InvoiceDate BETWEEN '2012-01-01' AND '2012-12-31 23:59:59',如果InvoiceDate字段有索引,这种方式能利用索引提升查询效率。
  • 分组与聚合:按员工的唯一标识EmployeeID和姓名分组,用SUM(i.Total)计算每个员工的2012年销售总额。
  • 排序取最大值:通过ORDER BY TotalSales2012 DESC将销售额从高到低排序,LIMIT 1只取排名第一的员工。

处理并列第一名的情况

如果存在多个员工销售额并列最高,上面的查询只会返回其中一个。可以用CTE(公共表表达式)来获取所有并列第一的员工:

WITH EmployeeSales AS (
    SELECT 
        e.FirstName || ' ' || e.LastName AS EmployeeName,
        SUM(i.Total) AS TotalSales2012
    FROM Employee e
    JOIN Customer c ON e.EmployeeID = c.SupportRepID
    JOIN Invoice i ON c.CustomerID = i.CustomerID
    WHERE i.InvoiceDate >= '2012-01-01' AND i.InvoiceDate < '2013-01-01'
    GROUP BY e.EmployeeID, e.FirstName, e.LastName
)
SELECT EmployeeName, TotalSales2012
FROM EmployeeSales
WHERE TotalSales2012 = (SELECT MAX(TotalSales2012) FROM EmployeeSales);

常见问题排查

你之前关联失败可能的原因:

  • 关联条件写错:比如误将Employee.EmployeeID和Customer.CustomerID关联,而非SupportRepID。
  • 使用了错误的连接类型:比如用LEFT JOIN导致包含了无客户的员工,但这类员工不会有业绩,反而干扰结果。

内容的提问来源于stack exchange,提问作者Carlos Mendez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:12:58