如何选择销售额最高的员工

时间:2016-11-04 17:50:33

标签: tsql sales

好的,所以我在数据库作业中遇到了这个问题。

我需要回答这个问题:

  

选择员工的姓名和员工的电子邮件地址   这个月的个人销售额最高。

所以我基本上需要选择当月销售额最高的员工。

这就是我所拥有的:

SELECT 
    FirstName + ' ' + LastName as 'Employee Name', Email 
FROM 
    Employee 
INNER JOIN 
    Sale ON Employee.EmployeeNumber = Sale.EmployeeNumber
GROUP BY 
    Sale.SaleDate, Sale.SaleNumber, Employee.FirstName, Employee.LastName, Employee.Email
HAVING 
    DatePart(Month, SaleDate) = DatePart(Month, GetDate()) AND ...

我唯一遗漏的是HAVING声明的第二部分。

我目前的查询返回了这些current query results

这些结果显示我在当月(11月)所做的所有销售,我们可以看到Tom Tucker的销售额最高。但是,我需要我的选择查询才能合法地显示他的名字。 (所以不使用WHERE(FirstName + LastName)='TomTucker')

我最初想过使用Max(Count(SaleNumber))但是我得到一个错误,说我不能在彼此之间使用聚合函数。所以我不知道如何得到我想要的结果。

谢谢!

1 个答案:

答案 0 :(得分:1)

解决问题将其分解为部分

本月获得最大的销售:

SELECT *
FROM Sale
WHERE DatePart(Month, SaleDate) = DatePart(Month, GetDate())
ORDER BY amt DESC
FETCH FIRST 1 ROW ONLY

加入用户表。

SELECT COALESCE(E.FirstName+' '+E.LastName,E.FirstName,E.LastName,'') as Employee_Name, E.Email 
FROM Employee E
JOIN (
  SELECT EmployeeNumber
  FROM Sale
  WHERE DatePart(Month, SaleDate) = DatePart(Month, GetDate())
  ORDER BY amt DESC
  FETCH FIRST 1 ROW ONLY
) On S.EmployeeNumber  = E.EmployeeNumber 

我们可以使用相同的技术来解决许多问题,以找到销售最多的员工的详细信息,我们只需用此替换内部查询

-- select employee# with most sales this month
SELECT EmployeeNumber 
FROM (
  SELECT EmployeeNumber, Count(SaleNumber) as SC
  FROM Sale
  WHERE DatePart(Month, SaleDate) = DatePart(Month, GetDate())
) sub
ORDER BY SC DESC
FETCH FIRST 1 ROW ONLY