Как использовать функцию Макс на другом столбце из выбора - PullRequest
1 голос
/ 01 сентября 2010

Есть запрос, который запрашивает любимые продукты, которые покупает каждый клиент.Я должен выбрать, и при первом выборе я выбрал количество продуктов, которые купил каждый клиент.в другом выберите, я хочу выбрать максимум этих групп для каждого клиента. Но когда я хочу выбрать максимум (предыдущий столбец выбора), он получает ошибку и говорит, что она не определена, может кто-нибудь помочь мне, как решить эту проблему.Я очень мотивирован, чтобы решить проблему таким способом, и я не желаю использовать другие методы, такие как создание представления или что-то подобное.Может ли кто-нибудь помочь мне в этом:

SELECT INN.Maximum,INN.Name, customer.ProductName from
(SELECT ContactName, ProductName, COUNT([Order Details].Quantity) AS NumOftimeCustomer
FROM Orders, [Order Details], Products, Customers
WHERE [Order Details].OrderID = Orders.OrderID
AND [Order Details].ProductID = Products.ProductID
AND Orders.CustomerID = Customers.CustomerID
GROUP BY ContactName, ProductName)customer
INNER JOIN
(SELECT Customers.ContactName AS Name, **MAX(customer.numOftimecustomer)** AS Maximum 
from    Customers, customer 
GROUP BY Customers.ContactName) INN
ON INN.Name = customer.ContactName AND INN.Maximum = customer.NumOftimeCustomer

та часть, которая упоминается с MAX (customer.numOftimecustomer) ** - это часть, которая выдает ошибку, и она говорит, что клиент объектане определен.есть ли способ решить это без просмотра?почему так?поскольку клиент, которого я определил, не является таблицей?

1 Ответ

2 голосов
/ 01 сентября 2010

вот что вы хотите:

select 
    *
 from  (SELECT ContactName, ProductName, COUNT([Order Details].Quantity) AS NumOftimeCustomer
    FROM Orders, [Order Details], Products, Customers
    WHERE [Order Details].OrderID = Orders.OrderID
    AND [Order Details].ProductID = Products.ProductID
    AND Orders.CustomerID = Customers.CustomerID
    GROUP BY ContactName, ProductName)customer
where customer.num = (select max(num) from

(SELECT ContactName, ProductName, COUNT([Order Details].Quantity) AS NumOftimeCustomer
    FROM Orders, [Order Details], Products, Customers
    WHERE [Order Details].OrderID = Orders.OrderID
    AND [Order Details].ProductID = Products.ProductID
    AND Orders.CustomerID = Customers.CustomerID
    GROUP BY ContactName, ProductName)customer2
 where customer2.name = customer.name)
...