Запрос: выбрать самый дорогой товар, купленный одним покупателем
уважаемые разработчики! Прошу помочь с запросом: Есть таблицы покупатели Customer,Заказы Orders, Товары Items. Схема данных ниже. Требуется найти самый дорогой товар, купленный одним покупателем. То есть если покупателей, который купили этот товар несколько, то этот товар не выводится, если даже он самый дорогой. Мой код не работает,но не могу понять в чем проблема:
(Select Customer_id,item_id,Customer_name,MAX(item_price) MostExpensiveItemName
from Customer c join Orders o on c.Customer_id = o.Customer_id
join items i on i.item_id = o.item_id) q
inner join (select Customer_id,item_name,item_price from i right join o on i.item_id = o.item_id
having count(Customer_id) = 1) s on s.item_id =q.item_id
Ответы (1 шт):
Давайте разбирать по шагам
Товары у которых у которых только один покупатель.
select item_id from orders group by item_id having count(customer_id) = 1Найдем заказы у которых товары только с одним покупателем.
select orders.* from orders inner join ( select item_id from orders group by item_id having count(customer_id) = 1 ) as uniqOrders on uniqOrders.item_id = orders.item_idДобавим собственно товары и покупателей.
select customers.*, orders.*, items.item_prise from customers inner join orders on orders.customer_id = customers.customer_id inner join items on items.item_id = orders.item_id inner join ( select item_id from orders group by item_id having count(customer_id) = 1 ) as uniqOrders on uniqOrders.item_id = orders.item_idПоскольку мы получили в итоге что у разыскиваемого товара может быть только один покупатель. Нам нужно отсортировать по цене по убыванию и взять только самую первую запись из результирующего набора. Никаких max и прочих вам не нужно.
PS. Если вам необходимо считать максимум по какой-то другой формуле (orders.quatity*items.items_prise) то просто сотртируете по ней.
