Найдите сотрудника, который совершил самые высокие продажи клиенту, который совершил большинство покупок - PullRequest
0 голосов
/ 26 апреля 2019

У меня проблемы с этим вопросом в моей домашней задаче базы данных, и мне нужно ответить на этот вопрос:

Какой сотрудник имеет самые высокие продажи клиенту, который совершил наибольшее количество покупок?

А это мои таблицы базы данных 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 ]

1 голос
/ 26 апреля 2019

Может быть, что-то вроде этого ...

Сначала получите покупателя с большинством покупок, а затем найдите всех сотрудников, которые продали этому покупателю, и верните 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
0 голосов
/ 26 апреля 2019

В одном из комментариев вы сказали, что «большинство продаж» означает большее количество продаж. Этот ответ принимает во внимание этот критерий.

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)
0 голосов
/ 26 апреля 2019

Постарайтесь решить проблему шаг за шагом.Найти идентификатор клиента с большинством заказов по сумме:

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