2016-06-16 3 views
-2

Я следую учебнику по SQL из w3schools.Получение информации через 3 таблицы

Я хочу получить стоимость всех заказов, отправленных грузоотправителем. Я не имею ни малейшего представления о том, как я могу получить эти данные, поскольку информация находится в разных таблицах, а INNER JOIN не работал для меня.

База данных: http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_groupby К настоящему моменту мне удалось получить количество заказов от каждого грузоотправителя.

SELECT Shippers.ShipperName,COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders 
LEFT JOIN Shippers 
ON Orders.ShipperID=Shippers.ShipperID 
GROUP BY ShipperName; 

Как я могу получить стоимость этих?

+0

Что вы подразумеваете под «значением» заказов? У вас есть запись для каждого грузоотправителя, включая общее количество заказов для каждого грузоотправителя. Какие результаты вы ищете? – David

+0

Можете ли вы поделиться структурами таблиц, некоторыми примерами данных и результатами, которые вы хотели бы получить для этого образца? – Mureinik

+0

«Как я могу получить ценность этих?» Что такое ценность ... и ценность чего? Можете ли вы объяснить, что вы здесь имеете в виду? – JNevill

ответ

3

Довести Price из более Product в вашем запросе вы должны присоединиться к таблицам OrderDetails к Order таблице на Orders.Id, а затем присоединиться к Products таблице к OrderDetail таблице на ProductID

SELECT Shippers.ShipperName, 
    COUNT(Orders.OrderID) AS NumberOfOrders, 
    Sum(Products.price * OrderDetails.Quantity) AS SumOfPrice 
FROM Orders 
    LEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID 
    LEFT JOIN OrderDetails ON ORders.OrderID = OrderDetails.OrderID 
    LEFT JOIN Products ON OrderDetails.ProductID = Products.ProductID 
GROUP BY ShipperName; 

I просто застрял с LEFT JOIN здесь, как ваш пример, но INNER JOIN будет работать так же хорошо и быть более эффективным.

Предложение FROM из инструкции SQL является одной из первых частей SQL для работы с вашей базой данных. Он устанавливает, какие таблицы мы собираем информацию и отношения между этими таблицами (используя ключевое слово ON). Итак, здесь мы приводим 4 таблицы и используем ключевое слово ON, чтобы показать взаимосвязь между всеми из них, используя их соответствующие идентификаторы. Затем мы можем добавить их поля в часть инструкции SQL и совокупность, где это необходимо.

+0

Правильная идея, но вам нужно умножить цену на количество. –

+0

Спасибо @DanBracuk. Я обновил запрос, чтобы увеличить цену. Это имеет больше смысла. – JNevill

+0

Думаю, я начинаю понимать, как работать. Я попытался запустить этот выбор, но получаю сообщение об ошибке «Синтаксическая ошибка (отсутствующий оператор) в выражении запроса« Заказы ».ShipperID = Shippers.ShipperID LEFT JOIN OrderDetails ON ORders.OrderID = OrderDetails.OrderID LEFT JOIN Продукты ON OrderDetails.ProductID = Products.ProductID''' Любая идея исправить? – SilenceIsGolden

1

Если вы хотите «сумму» цен на товары, это будет очень похоже на то, что у вас уже есть. Обратите внимание, как вы в настоящее время используете функцию COUNT(), чтобы получить счет, вы можете использовать функцию SUM(), чтобы получить общее число столбцов.

Что-то вроде этого:

SELECT 
    Shippers.ShipperName, 
    COUNT(Orders.OrderID) AS NumberOfOrders, 
    SUM(Products.Price) AS PriceOfOrders 
FROM 
    Orders 
    INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID 
    INNER JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID 
    INNER JOIN Products ON OrderDetails.ProductID = Products.ProductID 
GROUP BY 
    ShipperName 

Или, возможно, цена также должна быть умножена на количество в этом расчете? Что-то вроде этого:

SELECT 
    Shippers.ShipperName, 
    COUNT(Orders.OrderID) AS NumberOfOrders, 
    SUM(Products.Price * OrderDetails.Quantity) AS PriceOfOrders 
FROM 
    Orders 
    INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID 
    INNER JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID 
    INNER JOIN Products ON OrderDetails.ProductID = Products.ProductID 
GROUP BY 
    ShipperName 

Это зависит от вашего понимания структуры таблицы и данных. Но понятие одно и то же, группируя значение и применяя вычисление к сгруппированным значениям (счету или сумме).

+0

Это повторение ответа Дж. Невилла, которое было опубликовано на 3 минуты раньше. –

+0

@DanBracuk: Двумя людьми можно одновременно достичь одного и того же вывода. В чем ваш смысл? – David

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