寻找销售最多的客户给购买最多的客户

时间:2019-04-26 17:20:42

标签: sql sql-server group-by aggregate-functions

我在数据库作业中遇到这个问题,需要回答这个问题:

哪个员工对购买次数最多的客户的销售额最高?

这些是我的数据库表 enter image description here

这是我写此查询的尝试

--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 

但是这些不起作用

请帮助我编写此查询。

3 个答案:

答案 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)