#mysql #sql #subquery
#mysql #sql #подзапрос
Вопрос:
Таблицы представляют собой:
1) Producers: id, name
2) Products: id, name, price, category_id, producer_id
3) Customers: id, name, surname, age, country_id
4) Customer_orders: id, customer_id, product_id, quantity, discount, order_date
Мне нужно найти производителя, чей доход был самым высоким, другими словами: найти производителя, для которого сумма всех произведенных продуктов price * quantity - discount
является самой высокой.
Я полагаю, что я должен объединить таблицу customer_orders
с product_id
включенным столбцом products
и products
с producers
таблицей в столбце id
, а затем рассчитать соответствующий доход для всех производителей, а затем найти максимальное значение.
Проблема в том, как записать в MySQL.
Комментарии:
1. Что вы уже пробовали?
2. ничего заслуживающего упоминания, нужны несколько советов, как начать с такого запроса
Ответ №1:
Вы можете начать с чего-то вроде этого:
SELECT SUM(price - discount) income, producers.name name FROM customer_orders LEFT JOIN products ON customer_orders.product_id = products.id LEFT JOIN producers ON producers.id = products.producer_id GROUP BY producer_id
Я не уверен, что это будет работать именно так, как я его ввел, но это должно быть отправной точкой.
Вот несколько полезных ссылок:
Пожалуйста, обратите внимание: в настоящее время я работаю на сервере, где таблицы структурированы подобным образом, и это очень медленно и сложно что-либо сделать. Я бы посоветовал вам рассмотреть возможность хотя бы добавления общего порядка о и producer_id
в customer_orders
таблицу, чтобы сделать это намного проще.
Ответ №2:
Что вы хотите сделать, так это суммировать значения заказа для каждого производителя. Стоимость заказа определяется ценой, количеством и скидкой. Поскольку в таблице customer_orders можно найти только последние 2, вам придется присоединиться к таблице Products. Это можно сделать с помощью следующего запроса:
select * from customer_orders
inner join products on products.id = customer_orders.product_id
Но поскольку мы должны группировать их по производителю, нам также понадобится имя или id производителя, поэтому мы также должны присоединиться к таблице producers:
select * from customer_orders
inner join products on products.id = customer_orders.product_id
inner join producers on producers.id = products.producer_id
Теперь вы выбираете всю необходимую вам информацию. Для выполнения вычислений вам нужно заменить звездочку на:
(customer_orders.quantity * customer_orders.discount) - products.price
который выдаст вам значение каждого заказа.
Чтобы суммировать весь заказ для данного производителя, вам нужно обернуть приведенную выше строку в SUM()
функцию, и вам нужно добавить GROUP BY
предложение в конце запроса.
select SUM( (customer_orders.quantity * customer_orders.discount) - products.price) as value, producers.name from customer_orders
inner join products on products.id = customer_orders.product_id
inner join producers on producers.id = products.producer_id
group by producers.name