2016-06-16 13 views
-2

私はw3schoolsのSQLチュートリアルに従っています。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; 

どのようにそれらの価値を得ることができますか?あなたはOrders.IdOrderテーブルにテーブルOrderDetailsに参加する必要がありますし、私は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; 

OrderDetailテーブルにProductsテーブルに参加クエリへProductPriceをもたらすために

+0

注文の「価値」はどういう意味ですか?あなたが持っているものは、各荷送人の注文総数を含む各荷送人の記録です。あなたは何を探していますか? – David

+0

テーブルの構造、いくつかのサンプルデータ、およびこのサンプルのために得たい結果を共有できますか? – Mureinik

+0

「どうすればそれらの価値を得ることができますか?」価値は何ですか...そして価値は何ですか?ここで何を意味するのか正確に説明できますか? – JNevill

答えて

3

あなたの使用例としてLEFT JOINとここに止まっていますが、INNER JOINも同様に機能し、より効率的です。

SQL文のFROM句は、データベースに対して実行するSQLの最初の部分の1つです。情報を取得しているテーブルとそのテーブルの関係を設定します(ONキーワードを使用)。ここでは4つのテーブルを持ち込み、ONキーワードを使用して、それぞれのIDを使用してすべての関係を表示します。次に、フィールドをSQLステートメントのSELECT部分に追加し、必要な場所で集計することができます。

+0

正しい考えですが、価格に数量を掛ける必要があります。 –

+0

ありがとう@DanBracuk。私は拡張価格を行うためにクエリを更新しました。それは理にかなっています。 – JNevill

+0

私はどのように動作すべきか理解し始めていると思います。私はこの選択を実行しようとしましたが、「クエリ式に構文エラー(演算子がありません)」というエラーが表示されます。ShipperID = Shippers.ShipperID LEFT JOIN OrderDetails ON ORders.OrderID = OrderDetails.OrderID LEFT JOIN Products 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分前に投稿されたJNevillの回答の繰り返しです。 –

+0

@DanBracuk:2人で同時に同じ結論に達することは可能です。あなたのポイントは何ですか? – David

関連する問題