我在数据库作业中遇到这个问题,需要回答这个问题:
哪个员工对购买次数最多的客户的销售额最高?
这是我写此查询的尝试
--select Customers.Firstname,Products.Name,Sales.Quantity from Customers
--inner join Sales
--on Customers.CustomerId=Sales.CustomerId
--inner join Products
--on Sales.productId=Products.ProductId
--where Products.Name like 'Mobile'
--Select Customers.CustomerId,max(COUNT(Customers.CustomerId)) As Customecount,Emploees.EmploeeId,max(COUNT(Emploees.EmploeeId))as EmploeeeCount from Emploees
--inner join Sales
--on Emploees.EmploeeId=Sales.EmploeeId
--inner join Customers
--on Customers.CustomerId=Sales.CustomerId
--group by Customers.CustomerId,Emploees.EmploeeId ,Count(Sales.productId)as productCount,Count(Emploees.EmploeeId)as emploeeCount,Count(Customers.CustomerId)as customerCount
select * from
(select Distinct Customers.CustomerId,Sales.productId,COUNT(Sales.productId)as CountProduct from Customers
inner join Sales
on Customers.CustomerId=Sales.CustomerId
inner join Emploees
on Emploees.EmploeeId=Sales.EmploeeId
group by Sales.productId,Emploees.EmploeeId,Customers.CustomerId,Sales.productId) as Result
--gr
但是这些不起作用
请帮助我编写此查询。
答案 0 :(得分:1)
也许是这样。...
首先获取购买量最多的客户,然后查找所有已出售给该客户的员工,然后返回销售额最高的前1名员工。
SELECT TOP (1)
e.EmploeeId
, SUM(s.quantity * p.Price) TotalSales
FROM Emploees e
inner join Sales s ON e.EmploeeId = s.EmploeeId
inner join Product p ON s.productId = s.productId
WHERE s.CustomerId = (
-- Get the customer with most purchases
SELECT TOP (1) x.CustomerId
FROM ( SELECT
c.CustomerId
, SUM(s.quantity * p.Price) TotalSales
FROM Customers c
inner join Sales s ON c.CustomerId = s.CustomerId
inner join Product p ON s.productId = o.productId
GROUP BY c.CustomerId
) x
ORDER BY TotalSales DESC
)
GROUP BY e.EmploeeId
ORDER BY TotalSales DESC
通过查询来查找按计数(销售/购买数量)的“大多数销售和购买”将达到目的:
SELECT TOP (1)
e.EmploeeId
, COUNT(*) TotalSales
FROM Emploees e
inner join Sales s ON e.EmploeeId = s.EmploeeId
WHERE s.CustomerId = (
SELECT TOP (1) x.CustomerId
FROM ( SELECT
c.CustomerId
, COUNT(*) TotalSales
FROM Customers c
inner join Sales s ON c.CustomerId = s.CustomerId
GROUP BY c.CustomerId
) x
ORDER BY TotalSales DESC
)
GROUP BY e.EmploeeId
ORDER BY TotalSales DESC
答案 1 :(得分:0)
尝试逐步解决问题。找到总数最多的订单的客户ID:
SELECT TOP 1 sales.customerid
FROM sales
JOIN products ON sales.productid = products.productid
GROUP BY sales.customerid
ORDER BY SUM(sales.quantity * products.price) DESC
下一步是按与该客户相关的销售来查找销售额最高的员工(将其更改为总数很简单):
SELECT TOP 1 sales.salespersonid
FROM sales
WHERE sales.customerid = (
SELECT TOP 1 sales.customerid
FROM sales
JOIN products ON sales.productid = products.productid
GROUP BY sales.customerid
ORDER BY SUM(sales.quantity * products.price)
)
GROUP BY sales.salespersonid
ORDER BY COUNT(sales.salesid) DESC
最后选择员工记录:
SELECT *
FROM employee
WHERE employeeid = (
SELECT TOP 1 sales.salespersonid
FROM sales
WHERE sales.customerid = (
SELECT TOP 1 sales.customerid
FROM sales
JOIN products ON sales.productid = products.productid
GROUP BY sales.customerid
ORDER BY SUM(sales.quantity * products.price)
)
GROUP BY sales.salespersonid
ORDER BY COUNT(sales.salesid) DESC
)
答案 2 :(得分:0)
在其中一项评论中,您说“最多的销售量”意味着更多的销售量。这个答案考虑了这个标准。
SELECT TOP (1) SalesPersonID,
(FirstName + ' ' + MiddleName + ' ' + LastName) AS EmployeeName
FROM Sales S
JOIN Employees E ON S.SalesPersonID = E.EmployeeID
WHERE CustomerID =
(
-- Sub-query that returnes CustomerID with most quantities bought
SELECT TOP (1) CustomerID
FROM Sales
GROUP BY CustomerID
ORDER BY SUM(Quantity) DESC
)
GROUP BY SalesPersonID,
(FirstName + ' ' + MiddleName + ' ' + LastName)
ORDER BY SUM(Quantity)