2013-10-12 6 views
0

Я хочу выбрать самый дорогой продукт, который каждый клиент купил, но у меня есть информация в 3 таблицах: Клиенты, Покупки, Продукты.Выберите максимальное значение из разных таблиц в mysql

Таблицы выглядеть следующим образом:

клиентов:

Customer_ID | Customer_Name

Закупки:

Customer_ID | Product_ID

ProductPrices:

Product_ID | Price

Что я бегу это:

SELECT 
Customer_Name, max(Price), Purchases.Product_ID 
      FROM Customers 
      LEFT JOIN Purchases 
      ON Customers.Customer_ID=Purchases.Customer_ID 
      LEFT JOIN ProductPrices 
      ON Purchases.Product_ID=ProductPrices.Product_ID 
         GROUP BY Customer_Name 
         ORDER BY ABS(Price) DESC 
         ; 

И выход я получаю это имена и самая высокая покупка правильно, но product_id является первым, и не связаны с самой высокой ценой.

Можете ли вы помочь мне определить, что я делаю неправильно?

EDIT:

Чтобы сделать его проще для вас, я создал это:

http://sqlfiddle.com/#!2/db7f9/1

+0

вы можете разместить некоторые данные? –

+0

здесь: http://sqlfiddle.com/#!2/db7f9/1 – Piero

ответ

-2

попробовать этот

SELECT Customer_Name, max(Price) price , Product_ID FROM (
SELECT 
Customer_Name, Price, Purchases.Product_ID 
     FROM Customers 
     INNER JOIN Purchases 
     ON Customers.Customer_ID=Purchases.Customer_ID 
     INNER JOIN ProductPrices 
     ON Purchases.Product_ID=ProductPrices.Product_ID 


        ORDER BY ABS(Price) DESC 
)t 

GROUP BY Customer_Name 

DEMO HERE

ВЫВОД:

CUSTOMER_NAME  PRICE PRODUCT_ID 
    John   30000 3 
    Kate   30000 3 
    Peter   20000 2 
+0

Жаль, что я слышу, какая причина снизила мой голос нисходящего или его просто удовольствие? любые объяснения. этот ответ дает именно то, что ему нужно. –

+0

downvoter прочитал это http://meta.stackexchange.com/questions/135/encouraging-people-to-explain-downvotes –

+2

Я предполагаю, потому что он использует нестандартное SQL-расширение MySQL (позволяя столбцам, не входящим в GROUP BY, -агрегированные в списке SELECT) и, возможно, ошибочные результаты. –

1

Попробуйте это:

select distinct c.Customer_Name,pp.Product_Id,m.Price 
from 
    (select Customer_ID,max(Price) as Price 
    from Purchases p join ProductPrices pp on (p.Product_ID=pp.Product_ID) 
    group by Customer_ID) m 
join Customers c on (m.Customer_ID=c.Customer_ID) 
join ProductPrices pp on (pp.Price=m.Price) 
join Purchases p on (m.Customer_ID=p.Customer_ID and p.Product_ID=pp.Product_ID) 

Примечание: Если клиент приобрел несколько продуктов с одинаковая цена, это даст вам несколько строк на одного клиента.

+0

появляется сообщение об ошибке: http://sqlfiddle.com/#!2/db7f9/3 – Piero

Смежные вопросы