SQL-запрос с подзапросами, объединяющий несколько таблиц - MySQL - PullRequest
0 голосов
/ 22 марта 2019

Таблицы:

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.

Ответы [ 2 ]

1 голос
/ 22 марта 2019

То, что вы хотите сделать, это суммировать значения заказа для производителя Стоимость заказа определяется ценой, количеством и скидкой. Поскольку в таблице customer_orders можно найти только последние 2, вам нужно присоединиться к таблице Products. Это можно сделать с помощью следующего запроса:

select * from customer_orders
inner join products on products.id = customer_orders.product_id

Но так как мы должны сгруппировать их по производителю, нам также понадобится имя или идентификатор производителя, поэтому мы также должны присоединиться к таблице производителей:

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
1 голос
/ 22 марта 2019

Вы можете начать с чего-то вроде этого:

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

Я не уверен, будет ли это работать именно так, как я его напечатал, но это должно быть отправной точкой.

Вотнекоторые полезные ссылки:

Left Joins Sum Function

Обратите внимание: в настоящее время я работаю на сервере, где таблицы структурированыкак это, и это очень медленно и боль, чтобы что-нибудь сделать.Я бы посоветовал вам рассмотреть хотя бы добавление общего порядка и producer_id к таблице customer_orders, чтобы сделать его намного проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...